GUI環境では、置換を伴うドラッグアンドドロップにより、ファイルおよびディレクトリ全体(内容を含む)がコピーされたもので置き換えられます。'mv 'コマンドでこれと同じ直感的な結果を実現する方法はありますか?
mv
ではありません。
mv
のコア関数(その名前にもかかわらず)はrenameオブジェクトです。 UNIXが行う保証の1つは、名前の変更がアトミックであることです。部分的に完了した名前の変更を確認することはできません。この保証は、他のプログラムが参照している可能性のあるファイル(たとえば、/etc/passwd
)を変更したい場合や、ファイルの古いバージョンまたは新しいバージョンを表示したい場合に非常に役立ちます他の可能性はありません。しかし、あなたが説明するような「再帰的な名前変更」はその保証を破るでしょう-あなたはそれを途中で止めることができ、あなたは半分移動したツリーとおそらく混乱を持っているでしょう-そしてそれはそれで哲学に本当に適合しません/ mv
。 mv -r
が存在しない理由は、これが私の推測です。
(mv
は他の小さな方法でその哲学を破ることを気にしないでください。たとえば、mv
は実際にcp
の後にrm
を実行してからファイルを移動します別のファイルシステムへ)。
十分な哲学。ツリーをある場所から別の場所に再帰的に移動(「ドラッグアンドドロップ」)したい場合同じファイルシステム上の場合、次のようにmv
の効率と速度を得ることができます(例):
cp -al source/* dest/ && rm -r source/*
cp
の-l
フラグは、「コピーする代わりにハードリンクを作成する」ことを意味します。つまり、古いファイル名と同じファイルデータを指す新しいファイル名を効果的に作成します。ただし、これはハードリンクをサポートするファイルシステムでのみ機能します。つまり、ネイティブUNIX風のファイルシステムは問題ありませんが、FATでは機能しません。
&&
は、「前のコマンドが成功した場合にのみ次のコマンドを実行する」ことを意味します。必要に応じて、代わりに2つのコマンドを1つずつ実行できます。
ターゲットの空ではないサブディレクトリは置き換えられないため、mv
を使用して説明しているドラッグドロップ動作を再現できないと思います。
たぶんrsync
? rsync -a -r source/ target/
のようなもの? -v -n
を使用して実行し、最初に詳細な予行演習を行って、期待どおりに機能することを確認します。
mv -f /path/to/source/folder/* /destination/folder/
ファイルとディレクトリを含む/ path/to/source/folder内のすべてを/ destination/folderに移動します。
そして、既存のファイルとディレクトリを上書きします。
あなたはおそらくこれに対する正しい答えを変更したいと思うでしょう:
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
これは文字通りカットアンドペーストです。