删除超过5天的所有文件和目录,但一个文件除外

时间:2017-09-04 15:26:24

标签: bash

使用查找命令我想删除位于/home/ubuntu/pub/sfmc/Downstream的所有超过5天的目录,并考虑到:

  1. 目录中的所有文件也应该删除。
  2. 我们不应删除文件/home/ubuntu/pub/sfmc/Downstream/download.sh,即使它已超过5天。
  3. 这是我今天的脚本,但我认为它也会删除上面的download.sh文件,因为它没有异常

    #!/bin/bash
    find /home/ubuntu/pub/sfmc/Downstream -mtime +5 -type d -exec rm -rv {} +
    

    有没有办法添加此异常,以便我们不需要编写循环?

3 个答案:

答案 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 {} +