Como excluir todos os arquivos retornados pelo locate

13

No momento, ele é o que eu faço:

Etapa 1:

locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar

Etapa 2:

Execute manualmente uma remoção copiando e colando cada linha.

rm /home/abc/fooBar e rm /home/abc/Music/fooBar

Como faço isso em uma etapa? Algo como

localize fooBar > rm

Obrigado.

    
por theTuxRacer 21.12.2010 / 12:04

3 respostas

13

Como os outros colegas já mencionaram, xargs é seu amigo. É uma ferramenta muito poderosa e vou tentar explicar isso e fornecer uma solução para uma pegadinha comum.

O que o xargs faz é obter uma linha da entrada e anexá-la a outro comando, executando esse outro comando para cada linha na entrada. Portanto, digitando locate foobar | xargs rm -f , a saída do comando locate será corrigida no final do comando rm -f e executada para cada linha produzida por locate foobar .

A pegadinha:

Mas e se houver espaços em sua (s) linha (s) retornada (s) por localizar? Isso irá quebrar o comando rm -f porque os argumentos passados para rm precisam ser arquivos (a menos que você use a opção -r), e um caminho de arquivo precisa ser escapado ou citado se contiver espaços.

xargs fornece a opção -i, para substituir a entrada no comando que segue, em vez de apenas anexá-lo. Então eu mudaria a sugestão para

locate foobar | xargs -ixxx rm -f 'xxx'

que agora só será quebrado se os nomes de arquivos retornados por locate contiverem apóstrofos.

Eu tenho que concordar com qbi, que você deve ser cuidadoso ao usar rm -f ! Use o sinalizador -p para xargs, ou apenas execute o foobar de localização por si mesmo antes de alimentá-lo para xargs, ou elimine o -f de rm.

locate foobar | xargs -p -ixxx rm -f 'xxx'
    
por finley 21.12.2010 / 15:17
7

Você talvez precise de mais algumas opções para usar com xargs . Teste primeiro com xargs -p . Se estiver OK, remova a opção -p :

locate foobar | xargs rm
    
por qbi 21.12.2010 / 12:12
6

Para excluir todos os arquivos retornados por locate, emita o seguinte comando no seu terminal

locate foobar | xargs rm -f

    
por karthick87 21.12.2010 / 12:09