it-swarm.it

dando un output grep a rm

Sto cercando di reindirizzare grep output su rm, ma produce roba inutile. È richiesto un interruttore per rm? O rm può ricevere direttamente una regexp?

ls | grep '^\[Daruchini'| rm

rm: operando mancante Prova `rm --help 'per maggiori informazioni.

50
CodeBladeRunner

Devi usare xargs per trasformare l'input standard in argomenti per rm.

$ ls | grep '^Dar' | xargs rm

(Fai attenzione ai caratteri speciali nei nomi dei file; con GNU grep, potresti preferire

$ ls | grep -Z '^Dar' | xargs -0 rm

)

Inoltre, mentre Shell non usa regexps, questo è un modello semplice:

$ rm Dar*

(nel frattempo, penso di aver bisogno di dormire di più.)

61
geekosaur

Non analizzare l'output di ls .

Qui è molto semplice far filtrare a Shell i file desiderati. Nota che è la Shell che sta espandendo il modello Dar*, non il comando rm. L'espansione del pattern eseguita da Shell si chiama globbing .

rm Dar*

In casi più complessi, cercare il comando find.

Se si desidera delimitare l'output di grep con newline anziché con spazi bianchi, è possibile specificare che a xargs tramite -d opzione.

$ ls | grep '^Dar' | xargs -d '\n' rm

(come descritto in questa domanda)

3
mherzl

Per passare l'output come argomento, tendo ad usare un ciclo while poiché non ho familiarità con xargs.

ls | grep '^Dar' | while read line; do rm "$line";done;
2
Mitms

Su Catalina 10.15.3, con zsh, il modo in cui ho scoperto di occuparmi di newline e spazi bianchi è stato:

 Sudo find / | grep -i 'yourString' | tr '\n' '\0' | xargs -0 -n1 rm -r 

In altre parole, traducendo nuove righe senza spazio (da tr\n a\0) prima di rimuoverlo con "rm -0".

Inoltre, utilizzo sempre 'find' + 'grep -i' perché 'find -iname' a volte non genera nulla.

Un'ultima nota: trova e rimuove file e cartelle che corrispondono a "yourString". Solo per i file, specificare "find -type f", quindi l'opzione "-r" per rm è inutile.

0
YvUh

Il miglior comando per me è:

find ./Daruchini* -exec rm {}\;
0
Bodale