use o comando locate para localizar apenas arquivos, exceto links e diretórios simbólicos

0

Estou tentando usar o locate para encontrar quaisquer arquivos no meu sistema que contenham a palavra 'Jaynes'. Infelizmente, há um link simbólico chamado Jaynes que aponta para um diretório. Desejo excluir todos os links e diretórios simbólicos da minha pesquisa de localização. Obviamente, posso fazer isso com find , mas é mais lento.

Para ser específico, a saída desse comando no meu script 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

O que estou tentando fazer é eliminar a referência ao link simbólico (a segunda linha) e também às linhas abaixo que seguem o link simbólico, deixando somente a primeira linha, que é um arquivo real.

Muito obrigado por qualquer conselho

    
por Leo Simon 30.08.2017 / 01:39

1 resposta

1

O locate em si não tem uma opção para filtrar os links (só pode seguir ou não seguir links. Você pode filtrar links usando outra coisa:

locate() {
    command locate -0 "$@" |      # print filenames separated by 
locate() {
    command locate -0 "$@" |      # print filenames separated by %pre%
      while IFS= read -rd '' f    # read filenames separated by %pre%
      do
          [[ -l "$f" ]] ||        # test for links
             printf "%s\n" "$f"
      done
}
while IFS= read -rd '' f # read filenames separated by %pre% do [[ -l "$f" ]] || # test for links printf "%s\n" "$f" done }

Guarde isto no seu .bashrc ; então, em um novo shell, locate -i Jaynes não listará links.

    
por muru 30.08.2017 / 03:24

Tags