Como excluir todos os arquivos retornados localizando

13

No momento dele é o que eu faço:

Passo 1:

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

Passo 2:

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

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

Como faço isso em uma única etapa? Algo como

localize fooBar> rm

Obrigado.

theTuxRacer
fonte
Queres isto? rm -i localizar fooBar``
LFC_fan
Não tenho certeza do que o acima faz. Eu só quero remover todos os arquivos dos caminhos retornados quando executo um comando de localização.
theTuxRacer

Respostas:

13

Como os outros caras já mencionaram, xargs é seu amigo. É uma ferramenta realmente poderosa e tentarei explicá-la e fornecer uma solução alternativa para uma pegadinha comum.

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

A pegadinha:

Mas e se houver espaços em suas linhas retornadas por localização? Isso interromperá o rm -fcomando porque os argumentos transmitidos à rm precisam ser arquivos (a menos que você use a opção -r) e um caminho do arquivo precisa ser escapado ou citado se contiver espaços.

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

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

que agora só será interrompido se os nomes de arquivos retornados pela localização contiverem apóstrofos.

Eu tenho que concordar com qbi, que você deve ter cuidado ao usar rm -f ! Use o sinalizador -p para xargs, ou apenas execute o local foobar sozinho antes de alimentá-lo com xargs ou solte -f de rm.

locate foobar | xargs -p -ixxx rm -f 'xxx'
Finley
fonte
9
Para ser robusto com arquivos com caracteres exóticos (novas linhas, aspas, apóstrofos etc.) em seus nomes, você pode usar a opção -0( --null) para localizar e xargs. locate -0 foobar | xargs -0 rm
Ele
1
+1 para a resposta e selecionado para mencionar a pegadinha ^ _ ^
theTuxRacer
Eu tentei, mas não funcionou.
Pronoy999
Trabalhou parcialmente
SteveS 20/01/19
7

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

locate foobar | xargs rm
qbi
fonte
6

Para excluir todos os arquivos retornados por localização, execute o seguinte comando no seu terminal

locate foobar | xargs rm -f

karthick87
fonte