我试图自己解决这个问题。这是我在终端中使用的命令:
find . -name "*.jpg" -exec mv {} pictures \;
我没有首先创建一个名为Pictures的目录。发生的事情是创建了一个名为pictures.gif的文件。它是否找到文件然后在移动文件时将其覆盖?
通过此命令创建的pictures.gif文件是什么?
文件仍然可能在驱动器上的某个位置吗?
/
到该目录!总是!然后它只能是目录。
我试图自己解决这个问题。这是我在终端中使用的命令:
find . -name "*.jpg" -exec mv {} pictures \;
我没有首先创建一个名为Pictures的目录。发生的事情是创建了一个名为pictures.gif的文件。它是否找到文件然后在移动文件时将其覆盖?
通过此命令创建的pictures.gif文件是什么?
文件仍然可能在驱动器上的某个位置吗?
/
到该目录!总是!然后它只能是目录。
Answers:
第一:立即停止使用该驱动器。可以以只读方式重新安装它,只需确保不再进行任何写操作即可。是的,您已经删除了图片。它们可能是可恢复的,但是您继续使用该驱动器的次数越多,恢复任何内容的机会就越少。
您的命令运行了mv pic1.jpg pictures
,mv pic2.jpg pictures
等等。每次调用都会mv
覆盖当前pictures
由另一张图片命名的文件。
移动文件(在同一文件系统中)意味着将其从包含该文件的目录中分离出来,并以新名称附加到目标目录中。因此,此命令不会修改或删除任何文件数据,只有已消失图像的目录条目。
您可以运行一个工具,该工具可以搜索文件系统的可用空间并查找类似于jpeg的内容。幸运的是,每个jpeg文件都以可识别的标头开头。寻找删除内容的工具称为雕刻工具。在Ubuntu中有一些,包括restorejpeg,最重要的是,testdisk,...如果照片在单独的主分区或外部驱动器上,请安装一个或多个这些软件包,并将它们指向带有已删除图片的分区。
如果照片在系统磁盘上,则需要立即停止使用系统。使用另一台计算机下载实时CD或USB并从中启动。任何包含testdisk的实时CD都符合要求,但其中一些CD比其他CD更易于使用。System Rescue CD是很好的通用系统救援CD。Ubuntu用户可能对Ubuntu Rescue Remix更为熟悉。
供以后参考,养成使用习惯,mv -i
除非您打算覆盖文件。您可能已经具有的别名mv
,但是仅在您mv
直接在命令行上键入时才会出现,而在mv
脚本或find
命令调用时不会出现。
$ : >pictures
$ mv -i foo.jpg pictures
mv: overwrite `pictures'?
另外,如果/
在名称后加上a 作为目录名称,则如果该目录不存在或者该名称的文件不是目录,则会出现错误。
$ : >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。)
/
之后pictures
的内容?即,在两个命令中都不应该mv foo.jpg pictures/
(带有/
)mv
吗?
恐怕您刚刚将所有图片丢失到了单个文件中。可以使用最重要的取证工具来恢复某些文件,但是成功率下降的时间越长,使用介质(磁盘)的时间就越长。(确切地说,分区的安装时间越长。)
下次,当您指的是目录时,请在其中添加斜杠,并添加-i
选项以在文件已存在的情况下要求确认:
find -name "*.jpg" -exec mv -i {} pictures/ {} \;