我有一个包含大约 2000 个文件的目录。
我运行以下命令将这 2000 个文件移动到目标目录中:
find /opt/alfresco \
-type f \( -iname \*.pdf -o -iname \*.xml \) \
-exec mv {} /opt/alfresco/archived/2020-01-07 \; > /opt/alfresco/scripts/move.log
但是,我忘了/
在目标路径的末尾附加 a 。所以上面的命令所做的是,它创建了一个带有名称的文件,2020-01-07
并向其中写入了一些现在无法读取的二进制内容。我的 2000 个文件不见了。该2020-01-07
文件的大小为 220 KB。但是这 2000 个文件的总大小约为 1 GB。
有什么办法可以恢复这 2000 个文件吗?或者我可以通过什么方式将此文件转换为我的数据返回2020-01-07
的目录?2020-01-07
在目标路径的末尾添加一个斜杠
/opt/alfresco/archived/2020-01-07
会导致mv
命令错误,因为该2020-01-07
目录显然不存在。这将保存您的文件。如果它们是现有目录(无论目标路径末尾是否有斜杠),它们也将被保存
/opt/alfresco/archived/2020-01-07
,并且您的文件将被移动到该目录中(文件名冲突可能仍然是一个问题,当您将文件从多个目录移动到单个目录中时)。这就是你想做的。您忘记做的是首先创建该目录。现在,由于该目录不存在,该
find
命令所做的就是获取每个单独的 XML 和 PDF 文件,将其重命名为/opt/alfresco/archived/2020-01-07
,然后继续对下一个文件执行相同操作,覆盖前一个文件。该文件
/opt/alfresco/archived/2020-01-07
现在是find
.另请注意,由于您在 中运行
find
命令/opt/alfresco
,因此该路径下的任何 PDF 或 XML 文件,例如在 下的任何目录中/opt/alfresco/archived
,都会遇到同样的命运。这是一个很容易犯的错误。除了从备份中恢复丢失的文件之外,没有其他方便的方法可以恢复丢失的文件。
如果您不每小时备份一次数据,这可能是开始考虑这样做的好时机。我建议
restic
或borgbackup
用于备份个人文件,最好是针对某种异地或至少是外部存储。以下问题和答案可能会有所帮助:
在您下次重写此脚本时,您可能希望忽略
archived
子目录,并使用mv -n -t
. 您还需要明确-print
找到的文件(或使用mv -v
),find
否则不会输出它们的位置:评论中的一些事情(如下)可能有助于了解:
如果 GNU
mv
与 一起使用,如果不是目录-t target
,它将失败。target
您将使用-exec mv -t /opt/alfresco/archived/2020-01-07 {} +
一次移动多个文件find
(这也将加快操作速度)。如果 GNU
mv
与 一起使用-n
,它将拒绝覆盖现有文件。既不是标准
-t
也不-n
是标准(尽管 macOS 和 FreeBSD 也有-n
),但这不应该阻止您在不需要在系统之间移植的脚本中使用它们。