我是否刚刚使用 find -exec mv 删除了所有内容?

我是否刚刚使用 find -exec mv 删除了所有内容?

我尝试自己解决这个问题。这是我在终端中使用的命令:

find . -name "*.jpg" -exec mv {} pictures \;

我没有先创建名为 pictures 的目录。结果创建了一个名为 pictures.gif 的文件。它是否找到了这些文件,然后在移动它们时覆盖了它们?

该命令生成的 pictures.gif 文件是什么?

这些文件是否可能仍在驱动器的某个地方?

答案1

第一的:立即停止使用该驱动器。可以将其重新安装为只读,只需确保不再进行任何写入即可。是的,您已删除图片。它们可能是可以恢复的,但是您使用该驱动器的时间越长,恢复任何内容的机会就越小。

您的命令运行了mv pic1.jpg picturesmv pic2.jpg pictures等。每次调用都会覆盖当前由另一张图片mv命名的文件。pictures

移动文件(在同一文件系统内)意味着将其从包含它的目录中分离出来,并以新名称将其附加到目标目录中。因此,此命令不会修改或删除任何文件数据,只会修改或删除已消失的图像的目录条目。

您可以运行一个工具来搜索文件系统的可用空间并查找看起来像 jpeg 的东西。幸运的是,每个 jpeg 文件都以可识别的标题开头。查找已删除内容的工具称为雕刻工具Ubuntu 中有几个,包括恢复JPEG最重要的测试磁盘,...如果照片位于单独的主分区或外部驱动器上,请安装一个或多个软件包并将它们指向已删除图片的分区。

如果照片位于您的系统磁盘上,则需要立即停止使用系统。使用另一台计算机下载实时 CD 或 USB 并从中启动。任何包含 testdisk 的 Live CD应该符合要求,但有些比其他的更容易使用。系统救援光盘是一张优秀的通用系统救援 CD。Ubuntu 救援混音对于 Ubuntu 用户来说可能更熟悉。


供将来参考,除非您打算覆盖文件,否则请养成使用 的习惯mv -i。您可能已经有 的别名,但该别名仅在您直接在命令行上mv键入时才会生效,而不是在脚本或命令调用 时生效。mvmvfind

$ : >pictures
$ mv -i foo.jpg pictures
mv: overwrite `pictures'?

/另外,如果在目录名称后面放置一个,如果目录不存在,或者存在一个同名但不是目录的文件,则会出错。

$ : >pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory
$ rm pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory

为了避免 的陷阱find,你可以改用 bash 的递归目录遍历功能。你需要先使用命令将其打开shopt -s globstar(你可以将此行添加到~/.bashrc。然后:

mv **/*.jpg pictures/

(请注意,在 bash 中,**/还会遍历目录的符号链接,并且无法关闭此功能。如果您想要不查看目录的符号链接的递归遍历,请使用 zsh 或 find。)

答案2

恐怕您刚刚丢失了该单个文件中的所有图片。使用取证工具恢复一些文件和前面一样,但使用介质(磁盘)的时间越长,成功率就越低。(准确地说,分区安装的时间越长

下次,当您指的是目录时,请在其后添加一个斜线,并添加-i在文件已存在时要求确认的选项:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;

相关内容