首页 > 解决方案 > Mac shell脚本删除文件

问题描述

我有一个 Mac shell 脚本来删除 .rtf 文件。现在我想删除只有数字的文件夹名称(例如 1、2、3、10),它应该早于 5 天。我该怎么写?

我当前的脚本:

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

标签: macosshell

解决方案


尝试这个:

find /path/to/files/ -type d -mtime +5 -name '*[0-9]*' -execdir rm -rf -- '{}' \;

解释:

  • -type d我们想要目录,
  • -mtime +5超过 5 天
  • -name名称中包含任何数字
  • -execdir rm -rf我们想删除它

小心- 如果你在错误的位置运行这条线可能会破坏你的系统。rm -rf将删除所有匹配的文件而不进行确认。我建议你先运行:

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

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

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

假设我们有这个文件结构(只有目录):

baseDir
   - digit1
      - digit2
   - nodigit
      - digit4

如果你想删除digit1digit4你也应该使用上面的命令。find将传递digit1rm并且目录将被删除,但find无论如何都会尝试遍历它(产生错误)。但多亏了它,它也会遍历不匹配的nodigit(和 remoe digit4)。

如果您只想删除digit1目录而不是遍历nodigit,可以使用:

find . -maxdepth 1 -type d -name '*[0-9]*' -execdir rm -rf  -- '{}' \;

使用-maxdepth告诉find它是否应该进入目录(以及多深)。它还会阻止错误的产生(因为它不会尝试访问它们)。

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


推荐阅读