Linux / Unix Find 命令避免权限被拒绝消息
find 命令用于在 Linux 或类 Unix 操作系统上查找文件。 find 命令将搜索目录以匹配提供的搜索条件。您可以按类型、名称、所有者、组、日期、权限等搜索文件。默认情况下, find 将为您搜索所有子目录。让我们看看如何在 Linux 或类 Unix 系统上使用 find 时隐藏和修复权限被拒绝消息。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 文件管理 |
先决条件 | 查找命令 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 4 分钟 |
查找命令基本语法
语法如下:
在此示例中,find 将在 /tmp 目录中搜索名为“data*.txt”的文件并显示其路径名:
或
$ 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:查找将针对每个您没有读取权限的目录显示一条错误消息。
如何隐藏或修复“查找”命令权限被拒绝的消息
在上面的例子中,我没有 vmware-root 和 orbit-Debian-gdm 目录的读取权限。为了避免此问题,请尝试以下语法:
find 命令的示例输出 without permission denied spam:
## 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 命令
显示 output.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