我通过批处理 mv 丢失了很多文件到同一个目的地。我的文件还在磁盘上吗?

Posted

技术标签:

【中文标题】我通过批处理 mv 丢失了很多文件到同一个目的地。我的文件还在磁盘上吗?【英文标题】:I lost a lot of files through a batch mv to the same destination. Are my files still on the disk? 【发布时间】:2019-08-31 06:45:35 【问题描述】:

我试图将图像从文件夹批量移动到以图像 (px) 大小命名的新文件夹中。我使用这个命令来做到这一点:

awk 'system("mv "$1 " ./"$4)' sizes.log

sizes.log 的内容是这种格式的多行:

f122441728.jpg        Exif.Photo.PixelXDimension                   Long        1  4032

我现在痛苦地意识到这种方法的缺点。我没有测试我的命令并将许多文件移动到文件“1”中,因为在 size.log 的所有行中,第 4 列都是“1”。 我意识到有问题并中止了命令,但删除了大约 500 张图片。

我不确定 mv 是如何工作的,但据我了解,这发生了: 在每一行中,列 $1 中的文件被重命名为“1”,但图像文件的数据块仍保留在磁盘上。

这个假设正确吗? 例如,我是否有机会通过 photorec 恢复?

我必须在另一台机器上重新组装一个 RAID,但这是我以前很幸运的事情。我正在从另一个错误中整理出一系列 photorec..

编辑: 在我找到我的文件的备份后(耶!)我重新审视了导致我出错的过程,并使用这些命令将我的文件分类到以图片的图像大小命名的文件夹中。

identify -format "%f %w\n" *.jpg >> siz.log

awk 'system("mkdir ./"$2"/")' siz.log

awk 'system("mv "$1 " ./"$2"/")' siz.log

注意尾部的斜杠,这就是我之前遇到麻烦的原因。我错过了,没有收到来自 mv 的错误消息。

【问题讨论】:

如果这些文件真的很重要,请立即关闭系统并且在您有机会与数据恢复专家交谈之前不要启动它. @tadman 我已经这样做了。感谢您的提醒! 仅供参考,我看到了现有关闭投票的论点,因为它不是编程问题。但是,IMO,反驳说这实际上是一个编程问题是有道理的,因为作者正试图修复他们的 shell 脚本中的错误的后果。 是的,如果这是一个 HDD,那么 photorec 很有可能能够恢复其中的许多。在文件系统中操作时,mv 实际上不会移动或写入任何数据,因此不会更改每个图像的后备存储。 我认为您已经解决了您的问题,但我仍然不知道您的问题的答案。当我做这样的事情时,我首先使用 awk 来打印命令。然后,一旦我确信他们是对的,我将 awk 输出通过管道传输到 /bin/sh。如果您犯错时考虑到 MTTR,它的效率和速度差不多! 【参考方案1】:

如果文件仍然存在并且没有被无意删除,请尝试使用find 命令递归搜索根目录。这假定您有一些丢失文件的名称。例如,如果您知道其中一个文件名为 abc.jpg,则可以按如下方式进行搜索:

find / -name "abc.jpg"

有关详细信息,请参阅find 命令上的this 规范答案。

【讨论】:

将 find 能够找到 ls 不再列出的文件吗?我确实有所有文件名,但我担心您怀疑我已将文件移动到未知位置。不幸的是,我没有 “不再被ls 列出”是什么意思? 但是,是的,我确实将您的问题解释为已将文件移动到某个任意位置。

以上是关于我通过批处理 mv 丢失了很多文件到同一个目的地。我的文件还在磁盘上吗?的主要内容,如果未能解决你的问题,请参考以下文章

PySerial 丢失数据

cp和mv命令

Linux 下mv和cp命令

git-mv 的目的是啥?

数据有问题之后需要恢复应当怎么处理

ip报文发送时进行分片 在发送过程中丢失一个或是多个片时如何处理 以及如何分辨丢失与否?