シェルコマンドを使用してフォルダー内のファイルの名前を変更する方法


8

にファイルがありますsome/long/path/to/file/myfiel.txt

名前をに変更しsome/long/path/to/file/myfile.txtます。

現在、私はそれをmv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txtで行っていますが、パスを2回入力することは(タブ補完を使用しても)それほど効果的ではありません。

これをもっと速くするにはどうすればよいですか?(私はファイル名セグメントのみを変更する関数を書くことができると思いますが、それは計画Bです)。

回答:


11

これを単一のコマンドで行うには、次のようにします。

mv some/long/path/to/file/{myfiel.txt,myfile.txt}

完全なファイル名の例です。次のようなタイプミスがあるとすると、

mv some/long/path/to/file/myfi{el,le}.txt

両方とも完全なコマンドに展開されます。これらはブレース展開と呼ばれます。これらはzshでサポートされています。


ああ、これは多くの可能性を開きます。ありがとう!
Leonid Shevtsov、

5

ここにいくつかのオプションがあります:

ディレクトリに移動します。

cd /home/long/path
mv file1 file2
cd -

ディレクトリスタックを使用してディレクトリを変更します。

pushd /some/long/path
mv file1 file2
popd

サブシェルを使用してディレクトリに移動します。

( 
  cd /some/long/path
  mv file1 file2
)   # no need to change back

ブレース拡張を使用します。

mv /some/long/path/{file1,file2}

変数を使用します。

D=/some/long/path
mv "$D/file1" "$D/file2"

パスにスペースがあると、最後のアプローチが壊れることに注意してください。
slhck

@slhck スペースがある場合、すべてのアプローチが壊れます。
tylerl

1
いいえ、正しく入力した場合は入力されません。展開されたときの変数のみがmvへの複数の引数のように見えます
slhck

@slhckそこに行きます。
tylerl

3

ディレクトリに移動し、ファイルを移動して、前のディレクトリに戻ります。そのようです:

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.