更新

更新

我想在我的计算机上搜索所有出现的<searchterm>。现在,当我执行这样的搜索时

find / <searchterm>

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

抽象示例

我有一个文件夹,我们把它命名为my-own-folder。现在我想知道是否有其他同名文件夹,并搜索

find / my-own-folder

输出结果有几百行类似这样的内容

/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

接下来是另外数千行 (~380k 行),其中包含,,,/usr等等,示例:/lib/proc/var

/etc/gshadow
/etc/fonts
/dev/ram7
/media/user
/run/udev/watch
/bin/gzexe
/vmlinuz
/lost+found

而且这些行不包含my-own-folder。我非常怀疑它们都与该文件夹有关。那么为什么会输出它们呢?

精确的例子

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

find / openldap
find / slapd

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

更新

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

find / -name "<searchterm>"

答案1

您可以使用重定向

find / <searchterm> 2>/dev/null

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

例如:

 # find / -name StewieGriffin\*
/root: Permission denied
/home/peterg: Permission denied
/home/stewie/StewieGriffin-resume.doc

将转换为

# find / -name StewieGriffin\* 2>/dev/null
/home/stewie/StewieGriffin-resume.doc

请进一步了解关联

答案2

要限制输出量,您可以使用headtail读取前 x 个或后 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

您还可以使用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`

Find 允许指定要搜索的类型。如果要搜索文件夹,请输入 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

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

$ sudo find /   -type d -name "bin" | grep -v '\/usr\/*'                       
/home/xieerqi/bin
/bin

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

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

答案3

正如你所发现的,-姓名是要使用的标志,因为它内置于寻找. 作为一种更通用的解决方案,当其他应用程序没有工具来合理化搜索结果(例如 apt-get)时,您可以使用 grep。

find / <searchterm> | grep <searchterm>

答案4

/和之间不要使用空格my-own-folder。像这样设置文件夹的完整路径:

# find /var/www/my-own-folder

这只会输出的内容my-own-folder

相关内容