我必须在 bash 中执行一个脚本作业来删除路径中除其中一些之外的所有早于指定日期的目录。我知道不应删除的目录的名称......
你能帮助我吗???
很抱歉,我还只是个初学者……
非常感谢!
答案1
这一定是我的发现日。
find /yourpath -mmin +60 -type d -not \( -name dirname1 -o -name dirname2 \) -print0 | xargs -0 rm -r
将查找并删除所有超过 60 分钟且未命名dirname1
或的目录(相应调整) dirname2
。您可以使用其他-o name dirname
部分扩展此列表。此外,我强烈建议用rm -r
echo 替换该部分以进行测试。
答案2
尝试使用排除选项 -x 和 -X 的 tmpwatch
man tmpwatch 了解更多信息。
我自己从来没有使用过排除功能,所以我无法提供示例,但我很确定它会起作用。
答案3
对于 GNU find
:
find . ! -newermt 2010/10/01 -type d -regextype posix-egrep ! -regex '^.*/(foo|bar|baz)/?.*' -exec echo rm -rf {} +
这将查找并删除早于给定日期且与正则表达式不匹配的目录。更改“foo”等以匹配您的目录名称。使用 分隔每个名称|
。echo
完成测试后,删除 。检查修改时间,更改为 以-newerat
检查访问时间。