Linux/Unix Find命令避免权限被拒绝的消息

时间:2020-01-09 10:37:21  来源:igfitidea点击:

当我输入find . -type d -name" foo"命令我得到"权限被拒绝"错误消息。
如何排除Linux或Unix等操作系统下的find命令发出的所有权限被拒绝消息?
find命令用于在Linux或Unix之类的操作系统上查找文件。
find命令将搜索目录以匹配提供的搜索条件。
您可以通过 类型,名称,所有者,组,日期,权限等搜索文件。

默认情况下,查找将为您搜索所有子目录。

查找命令基本语法

语法是:查找到处看的标准动作find/dir/to/search -name filetosearch find/dir/to/search -name" * .c" find/home/theitroad/project/-name" * py" -print在此示例中,find将在/tmp目录中搜索名为data * .txt的任何文件并显示其路径名:

find /path/to/dir -name "pattern" -print
find /tmp -iname "data*.txt"

或者

cd /tmp
find . -iname "data*.txt" -print

输出示例:
"查找"将显示您没有读取权限的每个目录的错误消息。

如何修复查找命令权限被拒绝的消息

在以上示例中,我没有vmware-root和orbit-Debian-gdm目录的读取权限。
为避免此问题,请尝试以下语法:

## redirect error spam message to /dev/null ##
find where-to-look criteria action 2>/dev/null
find . -iname "data*.txt" -print 2>/dev/null

未经许可,输出示例被find命令拒绝垃圾邮件:

./rtzip/data005.txt
./rtzip/data001.txt
./rtzip/data004.txt
./rtzip/data003.txt
./rtzip/data002.txt
./rtzip/data008.txt
./rtzip/data006.txt
./rtzip/data007.txt
./rtzip/data009.txt

如何运作?

find命令末尾的2>/dev/null告诉您的shell将错误消息(FD#2)重定向到/dev/null,因此您不必在屏幕上看到它们。
使用/dev/null从程序/命令发送任何不需要的输出。
写入/dev/null特殊文件中的所有数据都会被系统丢弃。
要将标准错误重定向到/dev/null并将文件列表存储到output.txt,请键入:

## redirect error spam to /dev/null ##
find . -iname "data*.txt" -print 2>/dev/null > output.txt
cat output.txt

从Linux上的find命令排除所有权限被拒绝的消息

以下命令存在一个问题。
它将筛选出find命令创建的所有错误消息,而不仅仅是权限被拒绝的错误消息:

find / -name foo 2>/dev/null
find / -type d -name bar 2>/dev/null

为了避免这种情况,请在Linux或类似Unix的系统上尝试使用以下find命令和grep命令:

find / -name foo 2>&1 | grep -v "Permission denied"
find / -type d -name bar 2>&1 | grep -v "Permission denied"

简而言之,在基于Linux或Unix的系统中运行find时,应使用以下语法跳过权限被拒绝的错误消息:

find /path/to/dir -name "search-patter"  2>&1 | grep -v "Permission denied"
find /etc -name "x*.conf"  2>&1 | grep -v "Permission denied"

要将输出存储到文件中,请运行:

find /path/to/dir -name "search-patter"  2>&1 | grep -v "Permission denied" > output-file
find /etc -name "x*.conf"  2>&1 | grep -v "Permission denied" > output.txt

使用cat命令显示output.txt:

cat output.txt

在上面的示例中,我们使用find命令和grep命令一起过滤掉权限被拒绝的错误消息。