web-dev-qa-db-ja.com

私が別の場所にいるとき、cpまたはmvファイルはすでに存在している同じディレクトリにありますか?

~/blobにいて、~/blob/a_long_directory_name/c/x.xにファイルがある場合

私は文字が打てます

mv blob/a_long_directory_name/c/x.x blob/a_long_directory_name/even_more/y.y

最初のパラメータのディレクトリパスを使用する短いものを入力できるショートカットはありますか(現在のディレクトリではありません)。

mv blob/a_long_directory_name/c/x.x $same_dir/y.y

$same_dirのようなものは、param 1のディレクトリを指します。

12
Michael Durrant

タイピングの量を最小限に抑えるには、2つのステップで行うのがおそらく最も簡単です。 CDをディレクトリに移動し、移動します。

コマンドが1つしかない場合は、サブシェルを使用できます。

$ (cd blob/a_long_directory_name/c/ && mv x.x y.y )

つまり、cdはサブシェルでのみ有効になり、mvcdが成功した場合にのみ発生し、現在のシェルの作業ディレクトリは変更されません。

複数のコマンドがある場合は、ディレクトリスタックを使用します。

$ pushd blob/a_long_directory_name/c/
$ mv x.x y.y
$ mv z.z q.q
$ popd
8
Alan Shutko

Bashでは、 中括弧の展開 を使用できます

mv blob/a_long_directory_name/{c/x.x,evenmore/y.y}
26
iruvar

シェルのテキスト置換機能を使用できます。 bashでは、次のような獣を使用できます。

mv blob/a_long_directory_name/c/xx !#:$:gs^c/xx^evenmore/yy

分解するには:

!#は、これまでに入力された現在の行です

:$は、検討中の文字列(この場合は!#)の最後のワード(n番目のワードを選択するには、nで置き換える)を選択するよう要求します。これまでに入力した行の最後の単語が前の単語になります。

:gs^xx^yyは、結果のWordに対してグローバル(g)テキスト置換(s)を実行し、「xx」を「yy」に置き換えます。 ^は、パターンで/を使用できるようにするsコマンドの区切り文字です。

この方法では、パスの任意の部分( 'xx')を他のWord( 'yy')に置き換えることができるため、少し一般的です。

最後に、他の履歴操作と同様に、適切なシェルオプションを設定することをお勧めします(例:~/.bashrc)。この場合

shopt -s histverify

returnキーを押すと編集された行が表示されるので、編集してエラーをチェックできます。

なぜそのような構成を使用するのかはわかりませんが、この場合は機能します。

5
Wojtek