我正在尝试使用locate来查找我的系统上包含单词“Jaynes”的任何文件。不幸的是,有一个名为Jaynes的符号链接指向一个目录。我想从locate搜索中排除所有符号链接和目录。显然,我可以用它做到这一点,find
但速度较慢。
具体来说,我的 bash 脚本中此命令的输出
ls -al `/usr/bin/locate -i Jaynes`
是
-rw-r--r-- 1 simon simon 80 Aug 10 2016 /home/simon/LOCALSVN/ward/trunk/literature/Jaynes/JaynesBook.html
lrwxrwxrwx 1 simon simon 49 Oct 24 2016 /home/simon/research/Monash/Ward/literature/Jaynes -> /home/simon/LOCALSVN/ward/trunk/literature/Jaynes
/home/simon/LOCALSVN/ward/trunk/literature/Jaynes:
total 1352
drwxr-xr-x 2 simon simon 4096 Aug 10 2016 .
drwxr-xr-x 6 simon simon 4096 Oct 21 2016 ..
-rw-r--r-- 1 simon simon 80 Aug 10 2016 JaynesBook.html
我试图消除对符号链接(第二行)的引用,以及对符号链接后面的行的引用,留下仅有的第一行,这是一个真实的文件。
非常感谢你的建议
答案1
locate
本身没有过滤链接的选项(它只能跟随或不跟随链接。您可以使用其他方法过滤链接:
locate() {
command locate -0 "$@" | # print filenames separated by \0
while IFS= read -rd '' f # read filenames separated by \0
do
[[ -l "$f" ]] || # test for links
printf "%s\n" "$f"
done
}
将其保存在您的.bashrc
;然后在新的 shell 中,locate -i Jaynes
将不会列出链接。