我写了一个简单的命令来查找一个月以上的文件夹并删除它们。下面是命令:
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 bash -c 'rm -rfv "$0"' {} ;
:
find . -type d -mtime +31 -exec rm -rfv {} ;
或者更好(提高性能):
find . -type d -mtime +31 -exec rm -rfv {} +
如果您坚持显式调用Bash(尽管我想不出任何理由为什么您应该这样做,因为rm
不是Bash内置的),我建议更改:
find . -type d -mtime +31 -exec bash -c 'rm -rfv "$0"' {} ;
:
find . -type d -mtime +31 -exec bash -c 'rm -rfv {}' ;
同样适用于包含echo
的find命令。