использование определяет местоположение команды для нахождения только файлов, исключая символьные ссылки и каталоги

Я пытаюсь использовать, располагаются для нахождения любых файлов в моей системе, которые содержат слово '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

То, что я пытаюсь сделать, устраняют ссылку на символьную ссылку (вторая строка) и также на строки, ниже которых переходят по символьной ссылке, оставляя только первую строку, которая является реальным файлом.

Большое спасибо за любой совет

0
задан 29 August 2017 в 16:39

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 ]; затем в новой оболочке locate -i Jaynes не будут перечислены ссылки.

1
ответ дан 2 November 2019 в 08:32

Другие вопросы по тегам:

Похожие вопросы: