Mac Shell脚本删除文件

时间:2018-08-07 04:14:18

标签: macos shell

我有一个Mac Shell脚本来删除.rtf文件。现在我要删除的文件夹名称仅包含数字(例如1,2,3,10),并且应该早于5天。我该怎么写?

我当前的脚本:

find "/Library/Agents/_wrk" -type f -name "*.rtf" -delete

1 个答案:

答案 0 :(得分:0)

尝试一下:

blob.hexsha

说明:

  • find /path/to/files/ -type d -mtime +5 -name '*[0-9]*' -execdir rm -rf -- '{}' \; 我们想要目录,
  • -type d超过5天
  • -mtime +5的名称中包含任何数字
  • -name,我们想删除它

请小心-如果您在错误的位置运行此行会破坏您的系统。 -execdir rm -rf将删除所有匹配的文件,而无需确认。 我建议您先运行:

rm -rf

检查是否选择了正确的文件(它只会打印匹配的文件)。

编辑: 上面的解决方案有效,但是会产生错误(如注释中所述)。这是因为find尝试搜索刚刚删除的目录。

假设我们具有此文件结构(仅dirs):

find /path/to/files/ -type d -mtime +5 -name '*[0-9]*'

如果要同时删除baseDir - digit1 - digit2 - nodigit - digit4 digit1,则应使用上面的命令。 digit4find传递给digit1,目录将被删除,但是rm仍将尝试遍历它(生成错误)。但是,由于这一点,它也将遍历不匹配的find(并消除nodigit)。

如果您只想删除digit4目录而不遍历digit1,则可以使用以下方法:

nodigit

使用find . -maxdepth 1 -type d -name '*[0-9]*' -execdir rm -rf -- '{}' \; 告诉-maxdepth是否应该进入目录(以及目录的深度)。它还停止生成错误(因为它不会尝试访问它们)。

我只会提到另一种解决方案:从控制台转发find,这样就不会打印错误。