最近,我上学期使用的第二块硬盘开始出现故障,无法将其恢复到新硬盘上。我仍有第一个出现故障的硬盘,因此我们将其恢复到新硬盘上,但现在我需要将自第一次恢复(第一个故障硬盘 -> 第二个故障硬盘)以来发生更改的所有文件和内容恢复到新硬盘上(自某个日期以来第二个故障硬盘上的所有文件 -> 第三个正常工作的硬盘)。有没有一种简单的方法可以在 Linux 终端中编写脚本或使用其他程序?
我尝试使用以下命令,但是它们没有成功,并且在存档前几个文件夹后失败:
find . -type f -mtime -58 |xargs tar --no-recursion -czvf allmodified.tgz
tar czvf allmodified.tgz `find . -type f -mtime -58`
查找代码有效并找到了我需要的驱动器上的所有文件,但我仍然找不到方法让它们以文件结构存档,以便我可以在新驱动器(第三个工作硬盘)上解压文件,并且它们将保存在过去 2 个月内的原位。
我不是最擅长描述我的问题的人,所以如果您有疑问,请提问,我会尽力回答。
任何提示都有帮助,非常感谢!
答案1
它们可能会失败,因为在第二个示例中,你没有保护文件名中的空格。调用略有不同:
find . -type f -mtime -58 -print0 | tar -czvf allmodified.tar.gz --null -T -
这里,find
输出以NUL
字符结尾的文件路径。它们通过管道传输到tar
,它从 stdin ( -T -
) 读取以 null ( --null
) 分隔的输入。这--no-recursion
不是必需的,因为您不会在 tarball 中包含目录本身。
也可以看看:GNU tar 1.27:6.3 从文件读取名称
然后,您可以从提取档案的同一目录中提取档案,它会将文件放置在它们所属的目录中。请注意,tar
将覆盖现有文件提取时。为防止这种情况,请使用该--skip-old-files
选项。
至于第二个示例,如果文件或路径包含空格,它将失败,因为tar
将两个文件foo bar
和baz
(find
输出)视为三个,即tar foo bar baz
。处理此问题的正确方法是将find
with的输出通过管道传输-print0
到下一个命令,如果该命令具有从 -delimited 输入读取的开关NUL
(大多数 GNU 实用程序都有)。