このコマンドを使用して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'