我有一个Mac Shell脚本来删除.rtf文件。现在我要删除的文件夹名称仅包含数字(例如1,2,3,10),并且应该早于5天。我该怎么写?
我当前的脚本:
find "/Library/Agents/_wrk" -type f -name "*.rtf" -delete
答案 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
,则应使用上面的命令。 digit4
将find
传递给digit1
,目录将被删除,但是rm
仍将尝试遍历它(生成错误)。但是,由于这一点,它也将遍历不匹配的find
(并消除nodigit
)。
如果您只想删除digit4
目录而不遍历digit1
,则可以使用以下方法:
nodigit
使用find . -maxdepth 1 -type d -name '*[0-9]*' -execdir rm -rf -- '{}' \;
告诉-maxdepth
是否应该进入目录(以及目录的深度)。它还停止生成错误(因为它不会尝试访问它们)。
我只会提到另一种解决方案:从控制台转发find
,这样就不会打印错误。