如何安静地使用find?

Got*_*bel 5 find

我想<searchterm>在我的机器上搜索所有出现的情况。现在当我执行这样的搜索时

find / <searchterm>
Run Code Online (Sandbox Code Playgroud)

我可以看到搜索运行的所有路径。如何将结果限制为我的搜索词?

抽象例子

我有一个文件夹,我们称之为my-own-folder。现在,当我想知道是否还有其他同名文件夹并运行搜索时

find / my-own-folder
Run Code Online (Sandbox Code Playgroud)

输出显示像这样的几百行

/var/www/my-own-folder/index.php
/var/www/my-own-folder/lib/1.php
/var/www/my-own-folder/templates/2.php
/var/www/my-own-folder/log/3.log
Run Code Online (Sandbox Code Playgroud)

紧接着又上千行(〜380K线),它们包含/usr/lib/proc/var等,实施例:

/etc/gshadow
/etc/fonts
/dev/ram7
/media/user
/run/udev/watch
/bin/gzexe
/vmlinuz
/lost+found
Run Code Online (Sandbox Code Playgroud)

并且这些行不包含my-own-folder. 我非常怀疑它们是否都连接到该文件夹​​。那么为什么要输出呢?

精确示例

我想为 openldap 应用补丁,但不知道在哪里可以找到文件夹以运行补丁。所以当我搜索

find / openldap
find / slapd
Run Code Online (Sandbox Code Playgroud)

它似乎输出执行搜索的所有位置,而不仅仅是出现openldapor slapd

更新

我的错是没有-name像这样在我的搜索中使用

find / -name "<searchterm>"
Run Code Online (Sandbox Code Playgroud)

May*_*hux 5

您可以使用重定向

find / <searchterm> 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

这会将所有错误重定向到空设备 /dev/null

例如:

 # find / -name StewieGriffin\*
/root: Permission denied
/home/peterg: Permission denied
/home/stewie/StewieGriffin-resume.doc
Run Code Online (Sandbox Code Playgroud)

将被转换为

# find / -name StewieGriffin\* 2>/dev/null
/home/stewie/StewieGriffin-resume.doc
Run Code Online (Sandbox Code Playgroud)

请多看看这个链接

  • 这个答案有效,但为什么“find”中没有一个简单的选项?Linux有时候就是这么傻…… (2认同)

Ser*_*nyy 2

要限制输出量,您可以使用 或headtail读取第一个或最后 x 个术语。例如,

$ find . -iname "*test*" | head -n 10
find: `./.cache/dconf'./xterm-297/tektests
./xterm-297/tektests/imtesth.tek
./xterm-297/tektests/fotest.tek
./xterm-297/tektests/aitest.tek
./xterm-297/tektests/imtest.tek
./xterm-297/testxmc.c
./xterm-297/Tests
./xterm-297/vttests
./test.c
: Permission denied./file2.test
Run Code Online (Sandbox Code Playgroud)

您还可以使用less向上/向下翻页按钮方便地查看输出。

find / -type d -name "foldername" | less

您还可以使用! -path告诉 find 忽略某些特定文件夹

find . ! -path /somedirectory/anotherdirectory -iname "searchterm"

使用grep -v termyoudontwant。-v 标志允许忽略您不想在输出中看到的内容

find . -name "searchterm" | grep -v idontwantthatstuff`

查找允许指定您要搜索的类型。如果要搜索文件夹,请输入 d。要搜索名为 的系统上的所有文件夹test,请运行以下命令:

find / -type d -name "test"

这是在我的系统上搜索确切目录的具体示例:

$ sudo find / -type d -name "bin"                                              
/home/xieerqi/bin
/usr/lib/initramfs-tools/bin
/usr/lib/klibc/bin
/usr/lib/pm-utils/bin
/usr/lib/2013.com.canonical.certification:checkbox/bin
/usr/lib/i386-linux-gnu/qt4/bin
/usr/lib/ure/bin
/usr/lib/2013.com.canonical.certification:plainbox-resources/bin
/usr/lib/python3/dist-packages/plainbox/impl/providers/stubbox/bin
/usr/lib/guile-2.0/bin
/usr/share/qt4/bin
/usr/share/libreoffice/bin
/usr/src/linux-headers-3.16.0-30/tools/testing/selftests/rcutorture/bin
/usr/local/bin
/usr/bin
/bin
Run Code Online (Sandbox Code Playgroud)

如果我想忽略这些/usr/条目,我运行以下命令:

$ sudo find /   -type d -name "bin" | grep -v '\/usr\/*'                       
/home/xieerqi/bin
/bin
Run Code Online (Sandbox Code Playgroud)

要忽略目录 /usr、/lib、/proc、/var ,请像这样更改 grep

grep -v '\/usr\/*\|\/lib\/*\|\/proc\/*\|\/var\/*'