回答:
ではありませんmv
。
mv
(名前にかかわらず)コア機能は、オブジェクトの名前を変更することです。UNIXが保証することの1つは、名前の変更がアトミックであるということです。部分的に完了した名前の変更を確認することはできません。この保証は/etc/passwd
、他のプログラムが見ている可能性のあるファイル(たとえば)を変更したい場合に、ファイルの古いバージョンまたは新しいバージョンを表示し、他の可能性がない場合に非常に役立ちます。しかし、あなたが説明するような「再帰的な名前の変更」はその保証を破ります-途中で止めることができ、半分動かされた木とおそらく混乱を持っているでしょう-そしてそれは本当に哲学に適合しませんのmv
。それmv -r
はなぜ存在しないのかについての私の推測です。
(mv
他の小さな方法でその哲学を壊すことは決してありません。例えば、ファイルシステム間でファイルを移動するとき、mv
実際にcp
後に続きrm
ます。)
十分な哲学。同じファイルシステム上のある場所から別の場所にツリーを再帰的に移動(「ドラッグアンドドロップ」)する場合mv
、次のような効率と速度を得ることができます(例)。
cp -al source/* dest/ && rm -r source/*
-l
フラグcp
の手段は、「ハードリンクの代わりにコピーを作成する」 -古いファイル名と同じファイルのデータを指していること、それが効果的に新しいファイル名を作成しています。ただし、これはハードリンクをサポートするファイルシステムでのみ機能します。したがって、ネイティブのUNIX風のファイルシステムは問題ありませんが、FATでは機能しません。
&&
手段は、「上記のコマンドが成功した場合のみ、次のコマンドを実行します」。必要に応じて、代わりに2つのコマンドを1つずつ実行できます。
あなたはおそらくこれに対する正しい答えを変更したいと思うでしょう:
https://github.com/iaindooley/pickdrop
例:
私が持っていると言います:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
そして、これらのものを/ siteに移動したい
次のようになります:
site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png
私は行くことができます:
cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop
これは文字通り切り取りと貼り付けです。