我使用该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
in 您的主目录的目录,即您创建了目录~/tp2
。然后您更改为~/Downloads/221-tp2-public-main
并开始使用mv
.
mv
由于您将每个操作的目标指定为tp2
,并且由于它tp2
不是当前目录中的目录,因此您移动的每个文件都是重命名 tp2
。您tp2
随后每次运行时都会覆盖之前调用的文件mv
。最后,tp2
您留下的就是之前称为sauvegarde.sh
.
~/tp2/
通过使用作为每个操作的目标,您可以避免数据丢失mv
。
指~
的是您的主目录,您在其中创建了tp2
目录。目标路径末尾的/
并不是绝对必要的,但如果不是目录,它会mv
正常失败。~/tp2
至于您现在可以做什么来恢复丢失的文件;如果您在其他地方没有它们的其他副本,请考虑从最近的备份中恢复它们。
答案2
该命令的 GNU 实现mv
(在 Ubuntu 上找到的)有一个显式mv -t myDir
选项,用于检查该myDir
目录是否是一个现有目录。这避免了mv Source Dest
(搬去) 和mv Source Directory
(搬进)。
它还修复了诸如 之类的构造中的 args 顺序find ... -print0 | xargs -r0 mv -t Dir --
,其中 xargs 默认情况下附加 args (因此不可能将目标目录放在最后)。这两种情况都会避免你的问题。
该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
如果有两个或更多文件,则被dest
解释为必须是存在的目录。如果它不存在或者不是目录,则mv
失败:
mv: target 'dfsafsdfdf' is not a directory
如果您发出多个命令而不检查其结果,您可能会失去它们提供的任何保护措施的好处。
mv
有一个 POSIX_standard-i
选项以避免破坏现有的目的地。您可以mv
通过创建别名将其包含在交互式命令中:
alias mv='mv -i'