我应该查找所有名为temp
.我会这样做吗:find . -name "temp"
然后我应该确保没有弹出错误消息我可以2>/dev/null
在上一个命令的末尾添加 吗?
答案1
命令
find . -name temp
会找到所有名字那是temp
。这包括各种文件,例如常规文件、目录、套接字、符号链接等。
如果你只想找到常规的文件,然后使用-type f
测试:
find . -name temp -type f
要隐藏这可能引发的错误(通过尝试访问无法访问的目录):
find . -name temp -type f 2>/dev/null
即,将标准错误流重定向find
到/dev/null
(丢弃所有错误)。
如果你想避免错误,即不隐藏错误,然后确保不要尝试进入您无权访问的目录。对于 GNU find
,这可以方便地使用
find . -type d ! \( -readable -executable \) -prune -o -name temp -type f -print
该-type d
测试对于任何目录都是正确的,并且对于 GNU 来说,如果当前路径名引用了当前用户既不能执行又不能读取的内容,则find
否定测试将为正确。-executable -readable
一个目录是无障碍如果您可以执行它,并且您可以列出目录的内容(如果它也是可读的)。从搜索树中“修剪”目录-prune
,即find
不进入该目录。
这-o
是逻辑“或”运算。不使用时-o
,默认-a
为“AND”。指定的测试和操作以从左到右的方式进行评估。
最后-print
打印出通过所有测试的所有路径名。
你愿意吗做对找到的文件执行某些操作,然后通过 执行的操作来执行此操作find
。例如,要删除它们,请添加-delete
到命令末尾(或更改-print
为-delete
)。要执行更通用的操作,您可能需要循环它们。你这样做使用
find . -type d ! \( -readable -executable \) -prune -o -name temp -type f \
-exec sh -c '
for pathname do
# code that uses "$pathname" goes here
done' sh {} +
也可以看看