删除 dir 中的文件但排除 1 个子目录

发布于 2025-01-11 01:10:42 字数 226 浏览 0 评论 0原文

我有一个目录,里面充满了许多 htm 报告,我将这些报告保留了 30 天,并通过 cron 删除旧的报告,但有一个子目录我想保留更长时间。这是我在 cron 中所做的一行,但我如何告诉它保留一个子目录。

5 0 * * * find /var/www -name "*.htm*" -type f -mtime +30 -exec rm -f {} \;

非常感谢任何帮助!

I have a dir that is full of many htm reports that I keep around for 30 days and delete old ones via a cron, but there is one sub-dir I would like to keep longer. So this is the line I made in the cron, but how do I tell it to leave one sub-dir alone.

5 0 * * * find /var/www -name "*.htm*" -type f -mtime +30 -exec rm -f {} \;

Any help is greatly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心意如水 2025-01-18 01:10:42

使用 -prune 来防止进入符合某些条件的目录。

find /var/www -type d -name 'excluded-directory' -prune -o -name "*.htm*" -type f -mtime +30 -exec rm -f {} \;

Use -prune to prevent going into a directory that matches some conditions.

find /var/www -type d -name 'excluded-directory' -prune -o -name "*.htm*" -type f -mtime +30 -exec rm -f {} \;
神魇的王 2025-01-18 01:10:42

除了下面的建议之外,建议在 cron 中使用完整路径。

还可以使用 find 选项 -delete 代替 -exec rm -f {} \;。这样比较安全一些。

<前><代码> -删除
删除找到的文件和/或目录。始终返回 true。
这从当前工作目录作为 find 递归执行
下了树。它不会尝试删除带有
路径名中的“/”字符相对于“.”为了安全
原因。这暗示了深度优先遍历处理
选项。如果出现以下情况,-delete 主命令将无法删除目录:
它不是空的。以下符号链接与此不兼容
选项。

5 0 * * * /usr/bin/find /var/www -type d -name 'excluded-directory' -prune -o -name "*.htm*" -type f -mtime +30 -delete

In addition to suggestion below, suggesting to use full path in cron.

Also to use find option -delete in-place of -exec rm -f {} \;. It is somewhat safer.

 -delete
        Delete found files and/or directories.  Always returns true.
        This executes from the current working directory as find recurses
        down the tree.  It will not attempt to delete a filename with a
        "/" character in its pathname relative to "." for security
        reasons.  Depth-first traversal processing is implied by this
        option.  The -delete primary will fail to delete a directory if
        it is not empty.  Following symlinks is incompatible with this
        option.
5 0 * * * /usr/bin/find /var/www -type d -name 'excluded-directory' -prune -o -name "*.htm*" -type f -mtime +30 -delete
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文