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