【发布时间】:2021-12-03 11:23:24
【问题描述】:
我写了一个简单的命令来查找超过一个月的文件夹并删除它们。 这是命令:
find . -type d -mtime +31 -exec bash -c 'rm -rfv "$0"' {} \;
它在大多数情况下都可以正常工作,但有时,-exec 会“忽略”结果。 运行一次命令后,如果我在没有 -exec 的情况下运行 find,它仍然会找到一些超过一个月的文件夹尚未删除。
然后我尝试了一个简单的回显并没有输出:
$ find . -type d -mtime +31
./folder_A
./Folder_B
$ find . -type d -mtime +31 -exec bash -c 'echo "$0"' {} \;
<No output>
我找到了一个使用 grep 的工作区,但我想知道为什么 -exec 会忽略一些结果。 有谁知道吗?
这里是解决方法:
find . -type d -mtime +31 | grep . --color=never | while read line ; do rm -rvf "$line" ; done
【问题讨论】:
-
find -type d -mtime +31 -exec rm -rfv {} \;或find -type d -mtime +31 -delete? -
很奇怪。会不会是这些文件夹名称嵌入了改变
echo行为的隐藏字符?你试过cat -v <<< "$0"而不是echo "$0"吗? -
@Cyrus:如果目录匹配
-mtime +31但包含的文件不匹配则不起作用 - 文件不会被删除,并且目录上的删除失败,因为它不是空的。 AFAIKfind ... -delete没有“强制”选项。 -
旁注:这是非常低效的。
... -exec bash -c 'rm -rfv "$0" "$@"' {} +或下面answer 中列出的+的更好版本之一。