San*_*hta 17 linux find data-recovery command mv
我有一个包含大约 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
Run Code Online (Sandbox Code Playgroud)
但是,我忘了/在目标路径的末尾附加一个。所以上面的命令所做的是,它创建了一个带有名称的文件,2020-01-07并向其中写入了一些现在不可读的二进制内容。我的 2000 个文件不见了。此2020-01-07文件的大小为 220 KB。但那 2000 个文件的总大小约为 1 GB。
有什么办法可以恢复那 2000 个文件吗?或者我可以通过什么方式将此文件转换2020-01-07为2020-01-07我的数据返回的目录?
Kus*_*nda 50
在目标路径的末尾添加斜杠/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现在是由 找到的最后一个 XML 或 PDF 文件find。
另请注意,由于您在 上运行find命令/opt/alfresco,因此该路径下的任何 PDF 或 XML 文件(例如在 下的任何目录中/opt/alfresco/archived)都会遇到相同的命运。
这是一个很容易犯的错误。除了从备份中恢复丢失的文件之外,没有其他方便的方法可以恢复丢失的文件。
如果您不每小时备份数据,这可能是开始考虑这样做的好时机。我会推荐restic或borgbackup备份个人文件,最好是针对某种异地或至少是外部存储。
以下问题和答案可能会有所帮助:
在您下次重写此脚本时,您可能希望忽略archived子目录,并使用mv -n -t. 您还需要明确-print找到的文件(或使用mv -v),find否则不会输出它们的位置:
find /opt/alfresco \
-path /opt/alfresco/archived -prune -o \
-type f \( -iname '*.pdf' -o -iname '*.xml' \) \
-exec mv -n -t /opt/alfresco/archived/2020-01-07 {} + \
-print >/opt/alfresco/scripts/move.log
Run Code Online (Sandbox Code Playgroud)
评论(下面)中的一些可能有用的信息:
如果 GNUmv与 一起使用-t target,如果target不是目录,它将失败。您将使用-exec mv -t /opt/alfresco/archived/2020-01-07 {} +一次移动多个文件find(这也会加快操作速度)。
如果 GNUmv与 一起使用-n,它将拒绝覆盖现有文件。
既不是标准的-t也不-n是标准的(macOS 和 FreeBSD 也有-n),但这不应该阻止您在不需要在系统之间移植的脚本中使用它们。
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |