我试图自己解决这个问题。这是我在终端中使用的命令:
find . -name "*.jpg" -exec mv {} pictures \;
我没有首先创建一个名为Pictures的目录。发生的事情是创建了一个名为pictures.gif的文件。它是否找到文件然后在移动文件时将其覆盖?
通过此命令创建的pictures.gif文件是什么?
文件仍然可能在驱动器上的某个位置吗?
第一:立即停止使用该驱动器。可以以只读方式重新安装它,只需确保不再进行任何写操作即可。是的,您已经删除了图片。它们可能是可恢复的,但是您继续使用该驱动器的次数越多,恢复任何内容的机会就越少。
您的命令运行了mv pic1.jpg pictures
,mv pic2.jpg pictures
等等。每次调用都会mv
覆盖当前pictures
由另一张图片命名的文件。
移动文件(在同一文件系统中)意味着将其与包含该文件的目录分离,并以新名称将其附加到目标目录。因此,此命令不会修改或删除文件数据,而只会删除已消失图像的目录条目。
您可以运行一个工具,该工具可以搜索文件系统的可用空间并查找类似于jpegs的内容。幸运的是,每个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。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句