当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

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

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

我没有首先创建一个名为Pictures的目录。发生的事情是创建了一个名为pictures.gif的文件。它是否找到文件然后在移动文件时将其覆盖?

通过此命令创建的pictures.gif文件是什么?

文件仍然可能在驱动器上的某个位置吗?

最佳解决方法

首先:立即停止使用该驱动器。可以重新安装read-only,只需确保不要再进行任何编写。是的,您已经删除了图片。它们可能是可恢复的,但是您继续使用该驱动器的次数越多,恢复任何内容的机会就越少。

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

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

您可以运行一个工具来搜索文件系统的可用空间,并查找类似于jpegs的内容。幸运的是,每个jpeg文件都以可识别的标头开头。查找已删除内容的工具称为雕刻工具。在Ubuntu中有一些,包括recoverjpegforemosttestdisk……如果照片位于单独的主分区或外部驱动器上,请安装一个或多个这些软件包并将它们指向带有已删除图片的分区。

如果照片在系统磁盘上,则需要立即停止使用系统。使用另一台计算机下载实时CD或USB并从中启动。任何live CDs that include testdisk都可以满足要求,但有些比其他的更易于使用。 System Rescue CD是一个不错的general-purpose系统救援CD。对于Ubuntu用户,Ubuntu Rescue Remix可能更熟悉。


供以后参考,养成使用mv -i的习惯,除非您打算覆盖文件。您可能已经具有mv的别名,但是只有在您直接在命令行上键入mv时,别名才会出现,而不是通过脚本或find命令调用mv时。

$ : >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。)

次佳解决方法

恐怕您刚刚将所有图片丢失到了单个文件中。最可能对recover some files using forensic tools如此,但是使用介质(磁盘)的时间越长,成功率就会下降。 (确切地说,分区的安装时间越长。)

下次,当您指的是目录时,请在其中添加斜杠并添加-i选项,以在文件已存在的情况下请求确认:

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7518.html,未经允许,请勿转载。