使用locate命令仅查找文件,不包括符号链接和目录

使用locate命令仅查找文件,不包括符号链接和目录

我正在尝试使用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将不会列出链接。

相关内容