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


12

~/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のdirを指す場合

回答:


8

入力の量を最小限に抑えるには、おそらく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

これはeven_more相対パスに対応していません
...-役に立たない

それは正しいです。$ same_dirの例も同様に無視するようです。
アランシュトコ

+1気に入った。覚えて実行するのは非常に簡単で、それが私にとって重要です
マイケルデュラント

おもしろい、それはあなたが要求したことをしないからです。たぶん、あなたの質問はあなたが意図したものと正確に一致していませんか?
役に立たない

役に立たないので、タイトルを更新して、それがcp / mvファイルに関するものであることを明確にし、別のディレクトリにいても同じディレクトリに保存します。ユーザー名はかわいいですが、コメントを使用するとコメントが馬鹿げて見えます:)
マイケルデュラント


5

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

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

分解するには:

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

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

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

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

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

shopt -s histverify

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

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


a)ラインノイズが多すぎる(エレガントなブレースの拡張と比較)b)OPの問題を解決しません。元のパスプレフィックスc/x.xevenmore/y.y維持して置き換える必要があります。
ジョセフR.

2番目のコメントは、私の側の単純な省略であり、修正するには簡単な編集が必要でした。この答えがどのように下票に値するかわかりません。編集(技術)では、問題を解決し、パスの任意の部分をスワップできるため、より一般的です(よく似たものを使用しました$PWD)。確かに、それは最もエレガントではないかもしれませんが、シェルにはテキストの置換と単語の指定子があり、一部のユーザーはまだ研究に役立つかもしれないという事実を示しています。
Wojtek Rzepala

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