bashでは、パスを繰り返さずにファイルの名前を変更するにはどうすればよいですか?[複製]


39

重複の可能性:
bashコマンドでテキストを再利用

ファイルの名前をいくつかのディレクトリよりも深い名前に変更したい場合、どうすればパスの繰り返しを回避できますか?

例えば:

mv path/to/old_filename.txt path/to/new_filename.txt

これを作る方法があるかどうか疑問に思っています:

mv path/to/old_filename.txt (?)new_filename.txt

どこに(?)言っていくつかの方法だろう「と同じディレクトリにあります。」

回答:


26

bash 履歴展開の使用:

mv path/to/oldfile !#:1:h/newfile

ここで、!#:1:h現在入力している行( "!#")から、最初の単語( ":1")を取得し、そこからパスコンポーネント( ":h"-頭)のみを取得します。


これは、元の質問者が解決策であると仮定したものに最も近く、知るのに役立つので、+ 1です。
crazy2be

2
クール!ダースのブレース展開方法は簡単だと思いますが、これはまさに私が求めていたものです。
ネイサンロング

今日、2つの素晴らしい新しいことを学びました。また、ブレースの拡張は「Darthのブレースの拡張」と永久に考えます。
PileOfMush

62

ブレース展開を使用できます。 mv path/to/{old_filename.txt,new_filename.txt}

ここで代替のリストを定義し、異なる代替にそれが繰り返されるたびに使用してパラメータを繰り返してbashの指示bashシェル内ブレース展開にGNUガイドへのリンクがあります。

例えば、

a{b,c,dd,e}

に展開されます

ab ac add ae

唯一の注意点は、展開された繰り返しがターゲットプログラムへの引数として互いに追従できる必要があることです。


5
または、最小限に抑えますmv path/to/{old,new}_filename.txt。これは、コマンドの反転または他の種類の繰り返しに近いものにも役立ちます。私は何度もやったmv /etc/X11/xorg.conf{,.backup}ことがありますmv /etc/X11/xorg.conf{.backup,}。例えば、簡単な変更でプロセスを逆にすることができます。
ダニエルアンダーソン

26

上記のDarthの答えは賢明ですが、でアプローチを使用するcd場合は、サブシェルの使用も検討できます。

(cd path/to && mv old_filename.txt new_filename.txt)

ディレクトリの変更はサブシェルで行われるため、対話型シェルで実際にディレクトリを変更することはありません。


1
大きな欠点:にタブ補完を使用できませんold_filename.txt
bluenote10 14年

9

ディレクトリでいくつかのコマンドを実行する場合、便利な別の方法は次のとおりです。

pushd /path/to
mv oldfile newfile
...
popd

5

@Darthの回答が好きです。別の方法を次に示します。cd path/to && mv oldfile newfile && cd -


1
mv失敗した場合(アクセス権がないなど)、path/toディレクトリに残ることに注意してください。あなたは試みることができるcd path/to && mv oldfile newfile ; cd -ことを確認するためにcd -、常に場合を除いて、実行されるcd path/to(無許可は)あなたはまだ実行され失敗cd -し、不要で、前のディレクトリに移動します。mlc(+1)サブシェルの答えが優れています。私は推測cd . && cd path/to && mv oldfile newfile ; cd -して(時間の99.9%を働くだろうcd .あなたやあなたの現在のdirsに権限が変更された場合にのみ失敗し、その場合には別のディレクトリに行くことは、結果の悪いことではありません。
DRのjimbob
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.