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

Я пытаюсь использовать 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

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

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

0
задан 30 August 2017 в 02:39

3 ответа

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 не будут перечислены ссылки.

1
ответ дан 22 May 2018 в 18:56

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
ответ дан 18 July 2018 в 07:43

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
ответ дан 24 July 2018 в 18:51

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

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