Se eu executar esse comando, find $HOME/MySymlinkedPath -name "run*.sh"
nada acontecerá e não ocorrerá erro ('MySymlinkedPath' é um caminho com link simbólico para outro disco rígido que não seja o meu $ HOME).
Isso também falha:
find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"
E apenas para ter certeza, esse caminho inexistente falha (é claro), find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"
portanto o caminho está sendo encontrado (porque esse erro não ocorre), mas find
não realiza a pesquisa nele, e eu sou muito ignorante agora.
Só funciona se eu cd $HOME/MySymlinkedPath
primeiro remover a referência de caminho desta maneira, find -name "run*.sh"
mas isso não é bom para meus scripts.
Uma informação adicional :
este comando funciona como de costume ls $HOME/MySymlinkedPath/run*.sh
e, se eu for lá cd $HOME/MySymlinkedPath
e executar isso, ls ..
o resultado não é o que eu esperava - a lista do caminho em que o caminho com o link simbólico está localizado - ele retorna a lista do caminho real em a outra mídia / disco rígido !!!
pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath
Repensando :
Esse é um problema com find
e ls
/ ou com meu sistema? ou é esperado e não é um problema? Estou no Ubuntu 12.10. Ele falha em todos os terminais que testei, então não parece um "problema" do terminal.
Respostas:
Aqui está a resposta. Mas essa pergunta aponta para o bash como o alvo do problema.
A explicação é que
find
encontra"$HOME/MySymlinkedPath"
. É um link simbólico, não um diretório, então a descida recursiva pára por aí. Se a expressão corresponder"$HOME/MySymlinkedPath"
(por exemplo, emfind "$HOME/MySymlinkedPath" -name 'My*'
), elafind
será impressa como uma correspondência.Como apontado lá, descobri que a maneira mais fácil / limpa de lidar com ele e corrigir todos os scripts é, em vez de:
basta adicionar uma barra, para que
find
não comece no link simbólico, mas no destino do link simbólico:Como alternativa, passe a
-H
opção parafind
(observe que ela deve vir primeiro, antes dos caminhos) para instruí-la a percorrer os links simbólicos passados em sua linha de comando. (Isso é diferente do-L
que dizfind
para atravessar os links simbólicos encontrados durante a descida recursiva também.)E, finalmente, funcionou melhor aqui
-L
(por causa dos vários sistemas de arquivos com os quais vinculei pastas). Mas gera muitas mensagens de erro não problemáticas, então adicionei2>/dev/null
; e também decidiu criar esse aliasalias find='find -L'
:fonte