ディレクトリパスを繰り返さずに長いディレクトリパスでコマンドラインを移動する


16

mv2番目の引数に絶対パスを入力せずにコマンドを実行する方法はありますか?

例:

mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz


1
cdディレクトリだけにアクセスできない理由mvはありますか?
-zpletan

私は日々の仕事で、この種のコマンドを複数のディレクトリで頻繁に実行しています。特定の親ディレクトリから複数のコマンドを実行する必要があることがよくあります。
フィンバー

どういうわけか私はそれを使用して見つけました!! (二重感嘆符)は、端末で最後に実行されたコマンドを実行するために使用します。また、最後のコマンドにパラメーター/テキストを追加できますが、最後のコマンドからテキストを変更/削除しようとすることはできません。それを試してみてください、そして、あなたが成功するならば、私は答えのようにこれを落とします。幸運を!
Geppettvs D'Constanzo

回答:


32

bashのブレース展開を使用できます。この:

mv my/file/that/has/a/really/long/path/foo.{bar,baz}

に展開されます:

mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz

そして、mvこれらの2つの引数で実行されます。ブレースの拡張の詳細については、http://wiki.bash-hackers.org/syntax/expansion/braceを参照してください


3
それは素晴らしいことです。あなたがそれができるとは知りませんでした。
フィンバー

5

ブレース展開の代替として、bashシェルの履歴展開機能を使用できます。

  • ! 履歴拡張を導入します
  • # 現在のコマンドを示すイベント指定子
  • $ 最後の引数を参照する単語指定子

sedのようなs/pattern/replacement構文を使用して、展開で置換を実行できます。

somecommand path/to/foo.bar !#$:s/.bar/.baz

$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'

明確にパスが必要な場合(たとえば、mv置換によって簡単に取得できない完全に異なる名前のファイルへ)、h修飾子を使用できます。

$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'

readline最後の引数をヤンクするキーの組み合わせなど、他のオプションについては、「bashコンソールで現在入力されているパラメーターを繰り返す方法」を参照してください


2

あなたが試すかもしれません:

pushd .
cd /really/long/directory/name/
mv whatever.1 whatever.2
popd

2

変数付き

  1. ディレクトリを変数に保存します: `DIR=./really/long/path/
  2. moveを使用します。 mv "$DIR"foo.bar "$DIR"foo.bz

一行で: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz


ディレクトリを変更する

  1. cd作業したいディレクトリに移動することもできます:cd ./really/long/path
  2. 次に、ファイル名を変更します。 mv foo.bar foo.bz

一行で: cd ./really/long/path && mv foo.bar foo.bz


1
その2番目のものはおなじみのようです
;

2
&&その最後のワンライナーでの使用が最適です。それ以外の場合、cd失敗するmvと、ファイルが間違ったディレクトリで実行され、ファイルが上書きされる可能性があります。でcd ./really/long/path && mv foo.bar foo.baz、ディレクトリの変更に成功したmv場合にのみ実行さcdれます。
ガイラ

-3

エイリアスコマンドを使用して、ディレクトリ名を短縮できます。

alias src='/directory/name/of/source'
alias dst='/directory/name/of/destination'
mv src dst

1
-1 alias test='/var/log' ; cd testはを与え-bash: cd: test: No such file or directoryます。
-zpletan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.