web-dev-qa-db-ja.com

mvコマンドがソースディレクトリとターゲットディレクトリのファイルを削除した

Mvコマンドを実行して2つのファイルを移動しました。それらをfile_name_1、file_name_2と呼びましょう。私が使用したコマンドは:

mv file_name* /u/projects/lib

私の想定では、これにより両方のファイルがlibディレクトリーに移動されます。結局のところ、file_name_2は正しく移動されましたが、file_name_1は、移動元のディレクトリと移動先のディレクトリから削除されていました。

バックアップからファイルを回復することができ、作業を失うことはなかったので、ファイルを失うことは大したことではありませんでしたが、なぜこれが起こるのか、そしてそれが再び起こらないようにする最善の方法は何ですか? (今のところ、ファイルをコピーして、ソースファイルがきちんとコピーされたことを確認したら、ソースファイルを削除しています)

3
Scott Gersbank

mvコマンドがソースディレクトリとターゲットディレクトリのファイルを削除した

-無理だよ-。それはmvの動作方法ではありません。 -「mv」は、実際にファイルを移動する場合(ファイルシステム全体など)、「cp -a」を実行します。「cp -a」が成功したことを確認した場合のみ、削除を実行します。見る $ info mvこれに関する詳細な説明については。

同じファイルシステム内でファイルを移動するには、rename呼び出しを使用しますが、これはメタデータの変更にすぎません。ファイル自体は変更されません。

mv file_name */u/projects/lib

「file_name *」はおそらく1つのファイルであり、「lib」は存在しませんでした。その結果、「/ u/projects/lib」の末尾にある「/」を省略して、「file_name *」の名前を「lib」に変更しました。 「/」を追加した場合、コマンドは、ディレクトリ「lib」が存在しないというエラーを表示します。ファイルシステムの境界を越えないファイル名の変更は、メタデータの変更にすぎません。

「file_name *」が2つ以上のファイルだった場合、同じファイルへのファイルの移動についてエラーが発生します。そして、「lib」が「lib /」にあるファイルを見つけるディレクトリとして存在していた場合

12
Rinzwind