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


28

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

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

这行得通吗?由于存在“ -mtime 365 ” 询问,这会将旧一年的文件从今天移到新位置吗?

谢谢!

Answers:


40

你说的差不多。-mtime 365将完全是365天前的所有文件。您想要的是365天或更早的邮件,这意味着+在此号码之前添加-mtime +365

您可能还对该-maxdepth 1标志感兴趣,该标志可防止您在子目录中移动项目。

如果要确保仅移动文件,而不移动目录,请添加-type f到该行。

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

因此,该行应为:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

为了安全起见,首先执行ls -l而不是mv-这样一来,您可以先检查是否已获取所需文件,然后再使用mv重新运行它,如下所示:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;

3
请记住,这mtime修改时间(听起来像您可能想要的-大部分时间都是如此)。如果经常读取/引用这些日志,则可能要使用-atime(最后访问时间)。
voretaq7年

2
该行末尾的反斜杠是做什么的?
Ben Liyanage

1
@BenLiyanage反斜杠是后面的分号的转义字符。分号表示exec语句的结尾。请参见手册页find
珍妮D说恢复莫妮卡

4

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

此命令将所有文件移至/ source目录中,并将所有子文件夹移至源目录下:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

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

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

评分最高的答案包含此注释,并建议使用-type f。您的意思是说子文件夹确实被移动了,但是它们的内容保留在子文件夹中而不是从子文件夹中移走了吗?
奥斯丁2015年

1
不,我的意思是,“查找”将找到/ sourcedirectory中的所有文件以及该/ source目录中的所有子文件夹,这在我当时没有考虑过。“ -maxdepth 1”将“ find”限制为仅/ sourcedirectory
harleygolfguy 2015年

顺便说一句,我本来只是对最高评价的答案的评论,这是一个很好的答案,但我没有声誉。:)
harleygolfguy

0

您可以使用此命令,并指定仅查找文件,而不查找目录,并且该文件已存在一年以上

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;

他为什么要使用rm?您的命令将同时删除日志文件和目标目录。
斯文

糟糕,我的错误,我认为@mYzk要删除此文件。编辑
cuonglm

0

如果经常访问文件,可以将以下命令与atime一起使用

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;

0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

正确的是从中删除结尾的正斜杠 /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

在我的测试中,我无法复制该find: missing argument错误,但是我确实同意删除尾随斜杠/sourcedirectory是正确的。
guzzijason
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.