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.
command-line
pipe
theTuxRacer
fonte
fonte
rm -i
localizar fooBar``Respostas:
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 dorm -f
comando e executada para cada linha produzida porlocate foobar
.A pegadinha:
Mas e se houver espaços em suas linhas retornadas por localização? Isso interromperá o
rm -f
comando 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
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.
fonte
-0
(--null
) para localizar e xargs.locate -0 foobar | xargs -0 rm
Talvez você precise de mais algumas opções para usar
xargs
. Teste primeiro comxargs -p
. Se estiver OK, remova a-p
opção:fonte
Para excluir todos os arquivos retornados por localização, execute o seguinte comando no seu terminal
locate foobar | xargs rm -f
fonte