![查看所有 Bash/Shell 脚本相关的常见问题解答](https://www.alaica.com/wp-content/uploads/linux-110.png)
当我键入find . -type d -name "foo"命令时,我收到权限被拒绝的错误消息。如何排除 Linux 或类 Unix 操作系统下的 find 命令中的所有“权限被拒绝:消息”?
find 命令用于在 Linux 或类 Unix 操作系统上查找文件。find 命令将搜索目录以匹配提供的搜索条件。您可以按类型、名称、所有者、组、日期、权限等搜索文件。默认情况下,查找将为您搜索所有子目录。让我们看看在 Linux 或类 Unix 系统上使用 find 时如何隐藏和修复权限被拒绝的消息。
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 文件管理 |
先决条件 | 查找命令 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
美东时间。阅读时间 | 4分钟 |
查找命令基本语法
语法如下:
在本例中,find 将在 /tmp 目录中搜索任何名为“data*.txt”的文件并显示其路径名:
OR
$ find where-to-look criteria action
$ find /dir/to/search -name filetosearch
$ find /dir/to/search -name "*.c"
$ find /home/example/project/ -name "*.py" -print
$ find /path/to/dir -name "pattern" -print
$ find /tmp -iname "data*.txt"
$ cd /tmp
$ find . -iname "data*.txt" -print
![图 01:查找将针对您没有读取权限的每个目录显示错误消息。](https://www.alaica.com/wp-content/uploads/linux-111.png)
图 01:查找将针对您没有读取权限的每个目录显示错误消息。
如何隐藏或修复查找命令权限被拒绝的消息
在上面的示例中,我没有 vmware-root 和 Orbit-Debian-gdm 目录的读取权限。要避免此问题,请尝试以下语法:
未经许可拒绝来自 find 命令的垃圾邮件的示例输出:
## redirect error spam message to /dev/null ##
$ find where-to-look criteria action 2>/dev/null
$ find . -iname "data*.txt" -print 2>/dev/null
./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 messages to /dev/null ##
$ find . -iname "data*.txt" -print 2>/dev/null > output.txt
$ cat output.txt
从 Linux 上的“find”命令中排除所有“权限被拒绝”消息
以下命令有一个问题。它会过滤掉 find 命令创建的所有错误消息,而不仅仅是权限被拒绝的错误消息:为了避免这种情况,请在 Linux 或类 Unix 系统上
尝试以下 find 命令和grep 命令:
简而言之,您应该使用以下语法来跳过“权限”在 Linux 或基于 Unix 的系统中运行 find 时出现“拒绝”错误消息:
要将输出存储到文件中,请运行:使用cat 命令
显示输出.txt :
在上面的示例中,我们使用 find 命令和 grep 命令来过滤掉权限被拒绝错误消息。
$ find / -name foo 2>/dev/null
$ find / -type d -name bar 2>/dev/null
$ find / -name foo 2>&1 | grep -v "Permission denied"
$ find / -type d -name bar 2>&1 | grep -v "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
$ cat output.txt
结论
您学习了如何在基于 Linux、Unix 或 macOS 的系统上使用 find 命令时隐藏和修复权限被拒绝的消息。当然,我们也可以在可能的情况下以 sudo 身份运行命令,但可以避免所有这些混乱。不幸的是,您不会始终获得 sudo 或 root 访问权限。因此,我们在这里讨论了各种方法。对于您准备好的参考,sudo 语法如下:
请参阅在线 find/bash 命令手册页或通过键入以下 man 命令来阅读它。例如:
$ sudo find /dir/to/search -name "pattern" -action
$ sudo find / -name "jail.conf" -print
$ man find
$ man bash
$ man zsh
$ man ksh