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á os arquivos que possuem espaço em seus nomes. Então, eu quero que cite todos os argumentos para os quais envia rm
. Se find
der, Some report.docx
deve passar "Some report.docx"
para rm
.
Como eu posso fazer isso?
xargs
. Também como o wiki sugere, não usexargs
sem passar-print0
parafind
.xargs -d$'\n'
para limitar o delimitador apenas a novas linhas (e não a espaços; isso não processará aspas etc., especialmente - verifiquei em um sistema GNU) - a resposta dada em stackoverflow.com/a/33528111/94687Respostas:
Uso simples:
Se você insistir em usar
xargs
erm
comfind
, basta adicionar-print0
seu comando:Outro jeito:
De
man find
:fonte
"Some report.docx"
pararm
a menos que o nome do arquivo contém as aspas. O que você quer é passarSome report.docx
sem ser molestadorm
. A resposta da KasiyA (agora) mostra a maneira geral de fazer issofind
. [KasiyA: desculpe pelo ping errado antes.]$0
e$1
etc.xargs -0
vez dexargs -r0
.Opção
-0
dexargs
significa que a saída do tubo é interpretada como itens terminados nulos. Nesse caso, você também precisa criar entradas para o tubofind ... -print0
.fonte
Eu tinha um requisito semelhante e acabei usando a
-I
opção para ter um espaço reservado e pude citá-lo.fonte