別のディレクトリにある場合は、cpファイルまたはmvファイルをすでに同じディレクトリにコピーしますか?

別のディレクトリにある場合は、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パラメータ1のディレクトリを指します。

答え1

bashで利用可能支柱の拡張

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

答え2

タイピングの量を最小限に抑えるための最も簡単な方法は、おそらく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

答え3

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

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

それを破壊する:

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

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

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

この方法は、パス(「xx」)の一部を別の単語(「yy」)に置き換えることができるため、少し一般的です。

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

shopt -s histverify

Enterキーを押すと編集された行が表示されるため、編集を続けてエラーを確認できます。

なぜそのような設定を使用するのかはわかりませんが、この場合はうまくいきます。

関連情報