Monday, June 15, 2009
Reindirizzare al comando rm
Stamattina avevo bisogno di cancellare un file, un residuato bellico di winxp chiamato "desktop.ini". In effetti è un file minuscolo, quasi innocuo, ma da fastidio all'occhio (al mio ad esempio) e inoltre fa attrito con VLC, quando aggiungiamo delle cartelle intere alla riproduzione, poichè finisce in mezzo agli ingranaggi di VLC...soprattutto se questo dannato è presente ovunque, come il prezzemolo, per usare una metafora che non rende onore alla sua asfissiante ubiquità, in tutte le cartelle e sottocartelle relative.
Quindi ho deciso che lo/li voglio togliere nello stile di un vero scripter bash.
Mi sono accorto con immenso dispiacere che il comando rm non può ricevere tramite pipe o redirezione il nome dei file da cancellare.
Ho fatto quindi un po' di ricerche con lente d'ingrandimento alla mano in giro per la Rete e ho potuto scoprire i pregi del comando xargs.
Xargs è un comando che esegue un altro comando al quale fornisce i parametri di cui ha bisogno.
La particolarità è che li fa sembrare (al comando che li riceve) come provenienti direttamente dallo standard input, formattandoli secondo le opzioni che a noi vanno meglio.
Mi spiego meglio con un esempio:
$ find | grep desktop.ini
./Pink Floyd/Echoes-CD 2/desktop.ini
./Pink Floyd/Echoes-CD 1/desktop.ini
./Musica mia/Echoes-CD 2/desktop.ini
./Musica mia/Echoes-CD 1/desktop.ini
./Musica mia/Woodstock/desktop.ini
./Musica mia/Woodstock/Woodstock- Music from the Original Soundtrack and More Disc 1/desktop.ini
./Musica mia/Woodstock/Woodstock- Music from the Original Soundtrack and More Disc 2/desktop.ini
Tutti i percorsi che sono riportati qui, portano ai files che voglio cancellare.
Come si vede nelle stringhe sono presenti spazi, caratteri speciali e anche caratteri invisibili come il newline.
Alla fine di ogni linea è presente un carattere invisibile newline "\n".
Il mio scopo è reindirizzare queste righe a rm (fare il redirect to rm) una alla volta.
La soluzione al problema è questo comando:
$ find | grep desktop.ini | xargs -d "\n" rm
In questo modo si dice ad xargs di formattare le righe da dare da mangiare a rm, usando come terminatore (delimiter) il carattere \n.
Subscribe to:
Posts (Atom)