Como citar argumentos com xargs

12

Suponha que eu queira excluir todos os arquivos em uma pasta com mais de 1 MB.

$ find . -size +1M | xargs -0 rm

Isso não excluirá arquivos que tenham espaço em seus nomes. Então, quero que ele cite todos os argumentos enviados para rm . Se find fornecer Some report.docx , ele deverá passar "Some report.docx" para rm .

Como posso fazer isso?

    
por Kshitiz Sharma 10.12.2014 / 09:22

2 respostas

10

Uso simples:

find . -size +1M -delete

Se você insistir em usar xargs e rm com find , basta adicionar -print0 em seu comando:

find . -size +1M -print0 | xargs -r0 rm --

Outra maneira:

find . -size +1M -execdir rm -- {} +

Em man find :

-print0
    True; print the full file name on the standard output, followed by a null 
character (instead of the newline character that -print uses). This allows file names 
that contain newlines or other types of white space to be correctly interpreted by 
programs that process the find output. This option corresponds to the -0 option of 
xargs.
    
por 10.12.2014 / 09:24
8

Opção -0 de xargs significa que a saída do pipe é interpretada como itens com terminação nula. Nesse caso, você também precisa criar uma entrada para o pipe com find ... -print0 .

    
por 10.12.2014 / 09:39