Я пытаюсь использовать, располагаются для нахождения любых файлов в моей системе, которые содержат слово 'Jaynes'. К сожалению, существует символьная ссылка под названием Jaynes, который указывает на каталог. Я хочу исключить все символьные ссылки и каталоги от моего определять местоположение поиска. Очевидно, я могу сделать это с find
но это медленнее.
Быть конкретным, вывод от этой команды в моем сценарии удара
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
То, что я пытаюсь сделать, устраняют ссылку на символьную ссылку (вторая строка) и также на строки, ниже которых переходят по символьной ссылке, оставляя только первую строку, которая является реальным файлом.
Большое спасибо за любой совет
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
]; затем в новой оболочке locate -i Jaynes
не будут перечислены ссылки.