Tentando entender xargs

4

O alvo não é listar temp/run*.* arquivos. O objetivo é entender por que o segundo comando não funciona.

Primeiro comando:

find . \( -name 'temp' \) -print0 | xargs -0 -L 1 -I datafind ls -ltr datafind

liste todos os arquivos dentro de pastas temporárias do diretório atual

Segundo comando:

find . \( -name 'temp' \) -print0 | xargs -0 -L 1 -I datafind ls -ltr datafind/run*.*

erro de acesso em todos os diretórios que funcionaram com o comando anterior.

Eu pesquisei e li páginas de manual e exemplos, mas não consigo encontrar porque o segundo comando não funciona. Alguma pista, por favor?

    
por jose 02.10.2013 / 18:09

1 resposta

4

A confusão é que caracteres curinga como * e *.* são avaliados pelo shell quando você digita o comando.

Portanto, datafind/run*.* é avaliado pelo shell e deve ser substituído pelos nomes de arquivos correspondentes, mas não encontra nenhum arquivo correspondente. Portanto, datafind/run*.* é dado ao comando xargs e depois passa para o comando ls .

O comando ls não entende os caracteres curinga, portanto, apenas recebe sua entrada e tenta localizar um arquivo com esse nome. Não há arquivo com o nome run*.* , então você recebe um erro Nenhum arquivo ou diretório .

    
por 02.10.2013 / 18:27