"mv"コマンドを使用してファイルを失いましたが、ファイルがどこにあるのかわかりません!

"mv"コマンドを使用してファイルを失いましたが、ファイルがどこにあるのかわかりません!

このコマンドを使用してmv一部のファイルが失われました。私は彼らがどこにいるのかわかりません。コピーしたいディレクトリにありません。

私が書いた記録は次のとおりです。

samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ cd
samuelcayo@CAYS07019906:~$ ls
Desktop  Documents  Downloads  GameShell  Music  Pictures  pratice  Public  Templates  Videos
samuelcayo@CAYS07019906:~$ mkdir tp2
samuelcayo@CAYS07019906:~$ ls
Desktop  Documents  Downloads  GameShell  Music  Pictures  pratice  Public  Templates  tp2  Videos
samuelcayo@CAYS07019906:~$ cd Downloads/221-tp2-public-main/
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ ls
backup  copybash  Dockerfile               ntfy-1.16.0  packets.txt     README.md      restore        secret
cloud   data      Dockerfile_CAYS07019906  ntfy.zip     rapport-tp2.md  remplacer.sed  sauvegarde.sh  tail
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv rapport-tp2.md tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv Dockerfile_CAYS07019906 tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv packets.txt tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv sauvegarde.sh tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ cd
samuelcayo@CAYS07019906:~$ cd tp2/
samuelcayo@CAYS07019906:~/tp2$ ls
samuelcayo@CAYS07019906:~/tp2$ ls -l
total 0
samuelcayo@CAYS07019906:~/tp2$ cd ..

答え1

ホームディレクトリにというディレクトリを作成しますtp2。つまり、ディレクトリを作成します~/tp2。次に、に変更し~/Downloads/221-tp2-public-mainて使用を開始しますmv

mv各ジョブの宛先をとして指定tp2し、tp2現在のディレクトリのディレクトリではないため、移動するすべてのファイルは名前変更 tp2。後で実行するたびに、以前にtp2呼び出されたファイルが上書きされますmv。結局tp2残っているのは以前に呼び出されたものですsauvegarde.sh

~/tp2/これをすべてのタスクのターゲットとして使用すると、データの損失を防ぐことができますmv

ディレクトリ~を作成したホームディレクトリを示します。tp2ターゲットパスの終わりには必ずしも/必要ではありませんが、mvディレクトリでない場合は正常に失敗します。~/tp2

失われたファイルを回復するために今できることについては、他の場所にコピーがない場合は、最近のバックアップから復元することを検討してください。

答え2

mvこのコマンド(Ubuntuにあります)のGNU実装には、そのディレクトリが既存のディレクトリであることをmv -t myDir確認する明示的なオプションがあります。myDirこれを行うとmv Source Dest移動する)とmv Source Directory引っ越す)。

また、argsがデフォルトで追加されるxargsと同じ構文でargsの順序を変更しますfind ... -print0 | xargs -r0 mv -t Dir --(したがって、ターゲットディレクトリを最後に配置することはできません)。どちらの場合も問題を回避できます。

このmv -iオプションは、誤ってファイルを上書きするのを防ぎます。

答え3

対話的にこれを実行しないでください。

mv file1 dest
mv file2 dest
mv file3 dest

少なくとも最初のコマンドの結果を確認せずに、次のような複数のコマンドを実行しないでください。

mv file1 dest
ls -l dest # is there a dest, containing file1?

代わりに、次のように組み合わせてください。

mv file1 file2 file3 ... dest

ファイルが 2 つ以上の場合、必ずdest存在しなければならないディレクトリとして解釈されます。存在しないか、ディレクトリでない場合はmv失敗します。

mv: target 'dfsafsdfdf' is not a directory

結果を確認せずに複数のコマンドを実行すると、そのコマンドが提供する保護機能が失われる可能性があります。

mv-i既存のターゲットが破損しないようにするPOSIX_standardオプションがあります。mvエイリアスを作成して対話型コマンドに含めることができます。

alias mv='mv -i'

関連情報