Linux - 将特定日期后修改的所有文件传输到新硬盘

Linux - 将特定日期后修改的所有文件传输到新硬盘

最近,我上学期使用的第二块硬盘开始出现故障,无法将其恢复到新硬盘上。我仍有第一个出现故障的硬盘,因此我们将其恢复到新硬盘上,但现在我需要将自第一次恢复(第一个故障硬盘 -> 第二个故障硬盘)以来发生更改的所有文件和内容恢复到新硬盘上(自某个日期以来第二个故障硬盘上的所有文件 -> 第三个正常工作的硬盘)。有没有一种简单的方法可以在 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 barbazfind输出)视为三个,即tar foo bar baz。处理此问题的正确方法是将findwith的输出通过管道传输-print0到下一个命令,如果该命令具有从 -delimited 输入读取的开关NUL(大多数 GNU 实用程序都有)。

相关内容