Come eliminare tutti i file che vengono restituiti da individuare


13

Al momento è quello che faccio:

Passo 1:

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

Passo 2:

Esegui manualmente una rimozione, incollando ogni riga.

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

Come posso farlo in un solo passaggio? Qualcosa di simile a

individuare fooBar> rm

Grazie.


Vuoi questo? rm -i individuare fooBar``
LFC_fan

Non sono sicuro di cosa fa quanto sopra. Voglio solo rimuovere tutti i file, dai percorsi che vengono restituiti quando eseguo un comando di individuazione.
theTuxRacer il

Risposte:


13

Come hanno già detto gli altri ragazzi, xargs è tuo amico. È uno strumento davvero potente e proverò a spiegarlo e fornirò una soluzione alternativa per un gotcha comune.

Quello che fa xargs è prendere una riga dall'input e aggiungerla a un altro comando, eseguendo quell'altro comando per ogni riga dell'input. Quindi digitando locate foobar | xargs rm -f, l'output del comando Locate sarà patchato alla fine del rm -fcomando ed eseguito per ogni riga prodotta da locate foobar.

Il gotcha:

Ma cosa succede se ci sono spazi nelle linee restituite da Locate? Ciò interromperà il rm -fcomando perché gli argomenti passati a rm devono essere file (a meno che non si usi l'opzione -r) e un percorso di file deve essere evitato o citato se contiene spazi.

xargs fornisce l'opzione -i, per sostituire l'input nel comando che segue anziché semplicemente aggiungerlo. Quindi cambierei il suggerimento in

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

che ora si interromperà solo se i nomi dei file restituiti da Trova apostrofi contenuti.

Devo concordare con qbi, che dovresti stare attento ad usare rm -f ! Usa il flag -p per xargs, oppure esegui il foobar di localizzazione da solo prima di inviarlo a xargs, oppure rilascia -f da rm.

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

9
Per essere robusto contro i file con caratteri esotici (newline, virgolette, apostrofi, ecc.) Nei loro nomi, puoi usare l' opzione -0( --null) per individuare e xargs. Questo utilizza il carattere ASCII NUL sicuro per separare i nomi dei file:locate -0 foobar | xargs -0 rm
Jukka Matilainen,

1
+1 per la risposta e selezionato per menzionare il gotcha ^ _ ^
theTuxRacer il

L'ho provato ma non ha funzionato.
Pronoy999,

Ha funzionato parzialmente
SteveS

7

Forse hai bisogno di alcune opzioni in più per l'uso con xargs. Provalo prima con xargs -p. Se è OK, rimuovere l' -popzione:

locate foobar | xargs rm

6

Per eliminare tutti i file che vengono restituiti da Locate, emettere il seguente comando nel terminale

locate foobar | xargs rm -f

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.