使用查找命令我想删除位于/home/ubuntu/pub/sfmc/Downstream
的所有超过5天的目录,并考虑到:
/home/ubuntu/pub/sfmc/Downstream/download.sh
,即使它已超过5天。这是我今天的脚本,但我认为它也会删除上面的download.sh文件,因为它没有异常
#!/bin/bash
find /home/ubuntu/pub/sfmc/Downstream -mtime +5 -type d -exec rm -rv {} +
有没有办法添加此异常,以便我们不需要编写循环?
答案 0 :(得分:2)
我猜你遇到的问题是,当你这样做时,
find /home/ubuntu/pub/sfmc/Downstream
它最终列出/home/ubuntu/pub/sfmc/Downstream
,然后rm
命令也会删除主目录。你可以做的是
find /home/ubuntu/pub/sfmc/Downstream/* -mtime +5 -type d -exec rm -rv {} +
*
会阻止父级列出。
<小时/> 或者简而言之,你也可以写,
$ find /home/ubuntu/pub/sfmc/Downstream -mindepth 1 -mtime +5 -type d -delete
-mindepth 1
将丢弃父文件夹。-type d
仅选择目录-delete
删除所选节点答案 1 :(得分:1)
尝试一下:
find /home/ubuntu/pub/sfmc/Downstream/* ! -name "download.sh" -mtime +5 -type d -exec rm -rv {} +
注意:
! -name "download.sh"
这应该可以解决问题。
答案 2 :(得分:0)
这应该适合你。
-not -path 用于忽略find
的文件/目录find /home/ubuntu/pub/sfmc/Downstream/* -not -path '/home/ubuntu/pub/sfmc/Downstream/download.sh' -mtime +5 -type d -exec rm -rv {} +