Resultados de pipe de locate into rm

6

Eu tentei rodar

locate *.orig | xargs rm

mas disse No such file or directory

Eu já vi maneiras de fazer isso com find , mas o locate retorna o caminho completo para o objeto, por isso deve ser possível

    
por soldier.moth 22.10.2010 / 21:24

5 respostas

15

Se nomes de arquivos contiverem espaços, você deve usar

locate -0 $something | xargs -0 rm

ou

locate $something | while read f; do rm "$f"; done

Além disso, você deve proteger *.orig com aspas, para evitar a expansão do shell, e passá-lo para localizar intocado.

    
por enzotib 22.10.2010 / 21:39
1

é xargs não xarg

    
por maco 22.10.2010 / 21:30
0

O comando locate *.orig | xargs rm funciona, mas o que estava acontecendo era que locate estava encontrando *.orig arquivos na lixeira e rm exibiu o erro No such file or directory ao tentar excluir arquivos na lixeira .

    
por soldier.moth 22.10.2010 / 23:20
0

o locate não faz o globbing, mas o shell faz. O shell expande * .orig para o que encontra no diretório atual que corresponde a * .orig.

Apenas use

locate .orig

e se isso lhe der o que você precisa

locate .orig | xargs rm

ou, como a enzotib mencionou

locate -0 .orig | xargs -0 rm

se você tiver espaço em branco nos nomes dos arquivos.

    
por user unknown 20.03.2011 / 01:11
0

Um truque: Salve todos os caminhos no arquivo tmp. então, Loop nele:

#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
    pth=$line
    rm "$pth" 
done < /tmp/tmp.txt

rm -rf /tmp/tmp.txt 
    
por Abdennour TOUMI 23.03.2014 / 19:29