查找-抑制“没有这样的文件或目录”错误

21

我可以在grep中使用-s来抑制错误,但是在find命令的man页面中没有找到类似的选项...唯一的选择是重定向STDERR>/dev/null吗?

或者有其他处理方法吗?(如果需要,可以考虑高级awkperl解决方案)

例子:

$ for dir in `ls /mnt/16_c/`; do find /mnt/16_c/$dir/data/ -mtime +180 -type f -exec echo {} \;; done
find: `/mnt/16_c/test_container/dat/': No such file or directory

重定向 stderr 有什么问题吗?为什么要使用 awk 和 perl 等外部工具?不知道问题所在,很难提出解决方案。 - Andrea Corbellini
2
在调用find之前,您可以测试目录是否存在,例如test -d /mnt/16_c/$dir/data/ && find ....,因此根本不需要重定向。 - Stefan Hegny
2个回答

25

您可以使用2>/dev/null重新定向stderr,例如:

find /mnt/16_c/$dir/data/ -mtime +180 -type f -exec echo {} \; 2>/dev/null

顺便提一下,您问题中的代码可以替换为:

find /mnt/16_c/*/data/ -mtime +180 -type f 2>/dev/null

如果至少有一个匹配的目录,那么你甚至不需要抑制 stderr, 因为find只会搜索与此模式匹配的目录。


谢谢,没有想到通配符会阻止这个! - JacobIRR
12
如果“-exec”部分出现错误会发生什么?我不希望抑制这样的错误。 - FireEmerald

4
我知道这不完全是你要求的,但我的典型方法是find一个绝对存在的路径,然后使用-path标志进行过滤。
所以,我会使用find /home -path "/home/not-a-path/*",而不是find /home/not-a-path,因为前者不会引发错误。
我不得不这样做,因为当我在一个make文件中将失败的find流式传输到/dev/null时,错误仍会导致命令崩溃。但上述方法可以解决问题。

-path 命令接受一个模式,因此命令应为 find /home -path "/home/not-a-path/*" - Praveen Lobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接