我使用“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

您创建了一个名为tp2in 您的主目录的目录,即您创建了目录~/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'

相关内容