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)
小智 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)