find输出结果,但-exec忽略它



我写了一个简单的命令来查找一个月以上的文件夹并删除它们。下面是命令:

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命令。

最新更新