我想在我的计算机上搜索所有出现的<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
要限制输出量,您可以使用head
或tail
读取前 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
。