Linux/Unix Find命令提示Permission denied报错

时间:2019-11-20 08:52:59  来源:igfitidea点击:

find命令用于在Linux或Unix之类的操作系统上查找文件。
find命令将搜索目录以匹配提供的搜索条件。
您可以通过类型,名称,所有者,组,日期,权限等来搜索文件。
默认情况下,find将为您搜索所有子目录。

如果目录或者子目录没有权限,Find命令将提示Permission denied报错。
我们可以过滤掉这些信息。

find命令基本语法

语法是:

find where-to-look criteria action 
find /dir/to/search -name filetosearch 
find /dir/to/search -name "*.c" 
find /home/theitroad/ -name "*.py" -print

例如,在/tmp目录中搜索名为data * .txt的文件并显示其路径名:

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

或者

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

如何过滤掉find时提示的permission denied信息

如果没有某个目录的读取权限,则会报错permission denied。
为避免此问题,可以使用以下语法:

## 将报错信息重定向到 /dev/null ##
find where-to-look criteria action 2>/dev/null
find . -iname "data*.txt" -print 2>/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命令的Permission denied信息

下面的命令存在一个问题。
它把所有错误消息都丢掉了,而不仅仅是Permission denied:

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

如果只是想剔除Permission denied信息, 则可以和grep命令配合使用:

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

所有,在基于Linux或Unix的系统中使用find时,应使用以下语法来过滤掉Permission denied错误:

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