GUI環境でドラッグアンドドロップに置き換えると、ファイルとディレクトリ全体(コンテンツを含む)がコピーされたコンテンツに置き換えられます。 "mv"コマンドを使用して同じ直感的な結果を得る方法はありますか?
答え1
mv
.
(名前にもかかわらず)コア機能mv
は名前を変更する一つ。 UNIXが保証するものの1つは、名前の変更がアトミックであることです。つまり、部分的に完了した名前の変更は表示されません。この保証は、たとえば、他のプログラムで表示されるファイルを変更し、/etc/passwd
そのファイルの古いバージョンまたは最新バージョンを表示したい場合に便利です。そして他の可能性はありません。。しかし、あなたが説明する「再帰的な名前の変更」は保証を破ります。途中で止めると、乱雑になることができる半分の動く木が得られるので、この哲学には実際には適していませんmv
。mv -r
これが存在しない理由の私の推測は次のとおりです。
(これはmv
他のより小さな方法でアイデアを壊すことに注意しないでください。たとえば、ファイルがあるファイルシステムから別のファイルシステムに移動した場合は、実際には実行されますmv
。cp
)rm
哲学は十分です。ある場所から別の場所にツリーを再帰的に移動(「ドラッグアンドドロップ」)したい場合同じファイルシステムで、mv
次のような効率と速度が得られます(例:)。
cp -al source/* dest/ && rm -r source/*
-l
to フラグは、cp
「コピーではなくハードリンクの生成」を意味します。つまり、古いファイル名と同じファイルデータを指す新しいファイル名を効果的に生成します。ただし、これはハードリンクをサポートするファイルシステムでのみ機能します。したがって、すべてのデフォルトのUNIXスタイルファイルシステムでは機能しますが、FATでは機能しません。
&&
「前のコマンドが成功した場合にのみ、次のコマンドを実行してください」を意味します。必要に応じて、両方のコマンドを同時に実行できます。
答え2
mv
ターゲットの空でないサブディレクトリは置き換えられないため、説明したドラッグアンドドロップ動作を複製できないと思います。
おそらくrsync
?それはまるでrsync -a -r source/ target/
?実行を使用するには、-v -n
まず詳細なテスト実行を実行して要件を満たしていることを確認してください。
答え3
mv -f /path/to/source/folder/* /destination/folder/
ファイルやディレクトリを含む、/path/to/source/folder のすべてのエントリを /destination/folder に移動します。
そして、既存のファイルとディレクトリを上書きします。
答え4
この質問に対する正解を変更したい場合があります。
https://github.com/iaindooley/pickdrop
例:
私が持っているとしましょう:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
このものを/サイトに移動したい
だからそれは次のようになります:
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
これは実際にカットして貼り付けたものです。