Qual é o uso de -exec xargs e -print0?

17

Eu acho que estas são as maneiras comuns de passar o resultado de um comando para o próximo, como entradas.

Como esses três funcionam? Ou quais são alguns sites / URLs?

    
por James Bond 11.03.2010 / 10:41

3 respostas

22

Primeiras coisas para digitar:

man find

man xargs

O comando find imprime resultados para a saída padrão por padrão, portanto a opção -print normalmente não é necessária, mas -print0 separa os nomes de arquivos com um byte 0 (NULL) para que os nomes contendo espaços ou novas linhas possam ser interpretado corretamente.

A opção -exec é algo que você pode usar em vez de xargs - o comando find executa um comando para cada item que encontrar.

O comando xargs lê strings separadas por espaço ou nova linha (geralmente do comando find , mas elas podem vir de qualquer lugar) e executa algum comando para cada string.
Se xargs for executado com uma opção -0 , ele esperará seqüências separadas por NULL como saída por find ... -print0

A vantagem do xargs é que ele pode agrupar as strings, de modo que ele apenas execute um comando uma ou duas vezes, em vez de n vezes.

Então, no uso normal:

find start_directory -name '*.txt' | xargs ls -l 

encontrar listaria os nomes dos arquivos, e xargs emitia comandos como:

ls -l file1.txt file2.txt file3.txt ... fileN.txt

que é mais rápido do que ter seu comando find:

ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
    
por 11.03.2010 / 11:17
6

Note que o xargs não é mais necessário com implementações de busca atuais que provavelmente suportam esta sintaxe POSIX:

find directory -name '*.txt' -exec ls -l {} + 

que é mais simples e ligeiramente mais rápido que a variante xargs.

find directory -name '*.txt' | xargs ls -l 
    
por 11.03.2010 / 13:50

Tags