Readlink não está funcionando corretamente no terminal remoto SSH

2

Eu tenho o comando abaixo para encontrar qualquer pasta / arquivo pelo nome "Zero1" ou "zero1" (sem distinção entre maiúsculas e minúsculas) em toda a estrutura de diretórios de public_html depois de logar no terminal remoto através de ssh .

find . -iname "Zero1" -exec readlink -f {} + | tee Zero1.txt

Mas, se houver várias pastas correspondentes aos critérios (deve haver por isso que estou usando isso), ele interrompe dizendo extra operand .... Try readlink --help for more information .

Além disso, ele não encontra o arquivo "Zero1_Module.xml", que está na estrutura e corresponde aos critérios (o nome deve conter Zero1).

Por que isso? Como posso superar isso e ainda usar esse mesmo comando?

    
por Vicky Dev 08.11.2016 / 06:33

1 resposta

3

Primeiro, a opção iname significa algo diferente: de acordo com o Manual ,

-iname pattern

Like -name, but the match is case insensitive

No entanto, o padrão que você forneceu é para uma correspondência exata . Se você quiser encontrar uma correspondência para cada arquivo que começa com zero1 (caso em sensível), você deve usar:

 find . -iname 'zero1*'

(não é necessário usar maiúsculas, já que a correspondência não diferencia maiúsculas de minúsculas): o asterisco garante que haverá uma correspondência para qualquer arquivo que comece com zero1 (não diferencia maiúsculas de minúsculas).

Em segundo lugar, a cláusula exec deve ser escrita da seguinte forma:

find . -iname 'zero1*' -exec sh -c 'readlink -f $0  | tee Zero1.txt' {} \;

Ou

find . -iname 'zero1' -exec sh -c 'readlink -f $0 | tee -a Zero1.txt' {} \;

A cláusula exec deve (quase) sempre ser terminada por \; , e a invocação sh -c '...' é necessária para evitar que o shell quebre o cano; por último, a correspondência {} - > $ 0 é necessário para passar argumentos para um comando rodeado por '...' , porque, mais uma vez, o shell não interpreta os comandos dentro dos apices, portanto não pode substituir o real nome do arquivo para {} . Assim, precisamos passar o nome do arquivo para o '...' commnad por meio de um caminho externo.

Por favor, deixe-me saber se a mensagem de erro referente a readlink persiste após essa tentativa.

    
por 08.11.2016 / 07:18