「mv」は、ドラッグアンドドロップで置き換えますか?


19

GUI環境では、置換を伴うドラッグアンドドロップにより、ファイルとディレクトリ全体(コンテンツを含む)がコピーされたもので置き換えられます。「mv」コマンドでこの同じ直感的な結果を達成する方法はありますか?

回答:


20

ではありません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つずつ実行できます。


非常に情報提供します。どうもありがとうございました!
user7089

4

mvターゲットの空でないサブディレクトリは置き換えられないため、で説明しているドラッグアンドドロップ動作を再現できないと思います。

おそらくrsync?のようなものrsync -a -r source/ target/?で実行して、-v -n最初に冗長なドライランを実行し、目的の動作を確実に実行します。


3

mv -f /path/to/source/folder/* /destination/folder/

ファイルとディレクトリを含む/ path / to / source / folder内のすべてを/ destination / folderに移動します。

そして、既存のファイルとディレクトリを上書きします。


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

これは文字通り切り取りと貼り付けです。


非常にクールで、間違いなく検討する価値があります。しかし、質問は具体的には「mv」に関するものだったので、mvの背後にある哲学を詳細に説明するものとして正しい答えを残すと思います。この貢献に感謝しますが、間違いなく非常に役立ちます。
user7089

また、注目すべきreadmeから:「まったく堅牢ではありません-dropを呼び出すまで〜/ .pickにピックを保存し、ドロップを呼び出すと〜/ .pickのファイルパスを使用して新しい実行可能ファイル〜/ .dropファイルを作成します選択した各ファイルを現在の作業ディレクトリにコピーします。」
user7089
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.