将文件移动到早于某个日期的另一个目录

mYz*_*Yzk 35 unix files find copy

我正在寻找一种解决方案来移动从今天起早一年的文件。我的日志分区已满,但我无法删除它们。他们需要很长时间。无论如何,我想出的一种解决方案是:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;
Run Code Online (Sandbox Code Playgroud)

这行得通吗?由于“ -mtime 365 ”而询问这是否会将较旧的文件从今天移动到新位置?

谢谢!

Jen*_*y D 49

你几乎是对的。-mtime 365将是恰好 365 天前的所有文件。您需要 365 天或更长时间的那些,这意味着+在像这样的数字之前添加一个-mtime +365

您可能还对-maxdepth 1标志感兴趣,它阻止您移动子目录中的项目。

如果您想确保您只移动文件而不是目录,请添加-type f到该行。

在行的末尾我们添加,\;以便find知道这是我们正在执行的命令的结尾。

所以这条线应该是:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;
Run Code Online (Sandbox Code Playgroud)

为了安全起见,首先执行 ls -l 而不是 mv - 这样您就可以在使用 mv 重新运行之前提前检查您是否获得了所需的文件,如下所示:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;
Run Code Online (Sandbox Code Playgroud)

  • 请记住,`mtime` 是 ***Modification*** 时间(这听起来像是您可能想要的——大多数时候是这样)。如果经常阅读/引用这些日志,您可能需要使用`-atime`(上次访问时间)。 (3认同)
  • 这行末尾的反斜杠有什么作用? (2认同)
  • @BenLiyanage 反斜杠是后面分号的转义字符。分号表示“exec”语句的结束。请参阅“查找”的手册页。 (2认同)

小智 5

使用上述解决方案时要小心,我使用了它们并最终移动了所有子文件夹中的所有文件!!!!

此命令移动 /source 目录中的所有文件以及 source 目录下的所有子文件夹:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;
Run Code Online (Sandbox Code Playgroud)

相反,仅对 /sourcedirectory 中的文件使用选项 -maxdepth 1

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
Run Code Online (Sandbox Code Playgroud)