【问题标题】:Delete all folders older than X days using Shell [duplicate]使用 Shell 删除所有早于 X 天的文件夹 [重复]
【发布时间】:2013-09-05 12:38:47
【问题描述】:

我的备份存储在文件夹中。例如

 **05092013** > 
 - File1.sql
 - File2.sql
 - File1.tar
 - File2.tar

等等。

现在我想删除所有早于 X 天的文件夹。

我试过了

find $FILEDIR -mtime +14 -exec rm {} \;

但它只删除所有文件而不是文件夹。如何删除所有较旧的文件和文件夹?

有人可以帮我吗?

提前感谢 cSGermany

【问题讨论】:

    标签: linux shell cron


    【解决方案1】:

    使用-r?

    find "$FILEDIR" -mtime +14 -exec rm -ir {} \;

    如果您知道自己在做什么,请将 -ir 更改为 -r

    或使用-delete:

    find "$FILEDIR" -mtime +14 -delete
    

    但是,请确保您知道自己在做什么。

    您也可以添加这样的检查,以确保 $FILEDIR 始终位于您的主目录中:

    [[ $FILEDIR == /home/abc/* ]] && find "$FILEDIR" -mtime +14 -delete
    

    【讨论】:

    • 我不知道自己在做什么 ;) 这对我来说很新鲜。但是不能删除不在FILEDIR目录下的文件?!
    • so: find $FILEDIR -type d -mtime +14 -exec rm -r {} \;应该工作吗?
    • @cSGermany 添加-mindepth 1: [[ $FILEDIR == /home/abc/* ]] && find "$FILEDIR" -mindepth 1 -mtime +14 -delete。不使用[[ ]] 添加检查的另一种选择是使用-wholenamefind "$FILEDIR" -mindepth 1 -wholename '/home/abc/*' -mtime +14 -delete
    【解决方案2】:
    • 要找到only目录,你可以添加find $FILEDIR -type d ...它可以避免错误地删除文件(例如你给定根目录下的文件)。
    • 要删除非空目录,您需要rm -r,因此-r 选项在这里很重要。

    【讨论】:

    • 它可以工作,但也会删除主文件夹“备份”。我怎样才能防止它删除这个文件夹?
    • 看来konsolebox的回答解决了你的问题? @cSGermany
    • 摊位答案解决了!谢谢你。但问题是它也删除了主文件夹。
    • 你说得对。我不习惯这么快得到答案,就像你们两个一样,所以我忽略了它:D
    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多