我尝试自己解决这个问题。这是我在终端中使用的命令:
find . -name "*.jpg" -exec mv {} pictures \;
我没有先创建名为 pictures 的目录。结果创建了一个名为 pictures.gif 的文件。它是否找到了这些文件,然后在移动它们时覆盖了它们?
该命令生成的 pictures.gif 文件是什么?
这些文件是否可能仍在驱动器的某个地方?
答案1
第一的:立即停止使用该驱动器。可以将其重新安装为只读,只需确保不再进行任何写入即可。是的,您已删除图片。它们可能是可以恢复的,但是您使用该驱动器的时间越长,恢复任何内容的机会就越小。
您的命令运行了mv pic1.jpg pictures
、mv pic2.jpg pictures
等。每次调用都会覆盖当前由另一张图片mv
命名的文件。pictures
移动文件(在同一文件系统内)意味着将其从包含它的目录中分离出来,并以新名称将其附加到目标目录中。因此,此命令不会修改或删除任何文件数据,只会修改或删除已消失的图像的目录条目。
您可以运行一个工具来搜索文件系统的可用空间并查找看起来像 jpeg 的东西。幸运的是,每个 jpeg 文件都以可识别的标题开头。查找已删除内容的工具称为雕刻工具Ubuntu 中有几个,包括恢复JPEG,最重要的,测试磁盘,...如果照片位于单独的主分区或外部驱动器上,请安装一个或多个软件包并将它们指向已删除图片的分区。
如果照片位于您的系统磁盘上,则需要立即停止使用系统。使用另一台计算机下载实时 CD 或 USB 并从中启动。任何包含 testdisk 的 Live CD应该符合要求,但有些比其他的更容易使用。系统救援光盘是一张优秀的通用系统救援 CD。Ubuntu 救援混音对于 Ubuntu 用户来说可能更熟悉。
供将来参考,除非您打算覆盖文件,否则请养成使用 的习惯mv -i
。您可能已经有 的别名,但该别名仅在您直接在命令行上mv
键入时才会生效,而不是在脚本或命令调用 时生效。mv
mv
find
$ : >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/ {} \;