Se você deseja exibir todos os arquivos em $HOME
, incluindo aqueles referenciados por links simbólicos, que terminam com .tex
e contêm a string janne
:
find -L "$HOME" -type f -name '*.tex' -exec grep -l 'janne' {} + 2>/dev/null | vim -R -
Se você deseja exibir somente os links simbólicos encontrados em $HOME
denominado *.tex
correspondente aos arquivos que contêm a string janne
:
find -L "$HOME" -xtype l -name '*.tex' -exec grep -l 'janne' {} + 2>/dev/null | vim -R -
A única maneira de evitar a mensagem de erro "Muitos níveis de links simbólicos" é descartar todos os erros, o que fiz com a construção 2>/dev/null
.
Em ambos os casos, o verbo find
não atravessará os arquivos e diretórios que ele já percorreu - ele lembra onde já foi visitado e remove automaticamente essas partes da árvore do sistema de arquivos. Por exemplo,
mkdir a a/b a/b/c
cd a/b/c
ln -s ../../../a
# Here you can ls a/b/c/a/b/c/a/b/...
# But find will not continue for very long
find -L a
a
a/b
a/b/c
find: File system loop detected; ‘a/b/c/a’ is part of the same file system loop as ‘a’.