Azioni

Differenze tra le versioni di "Shell Tricks"

Da MontelLUG WIKI.

m (Eliminazione file mp3 di tutti gli utenti :))
(aggiunto selezionare righe da un file)
Riga 21: Riga 21:
 
Il mkdir crea quindi le directory.<br>
 
Il mkdir crea quindi le directory.<br>
 
'''Attenzione:''' cosi' com'e' non funziona con nomi che contengono spazi.
 
'''Attenzione:''' cosi' com'e' non funziona con nomi che contengono spazi.
 +
 +
== Selezione di righe da un file ==
 +
<pre>
 +
<nowiki>
 +
1. sed -n '5,10p;10q' nomefile
 +
2. head -10 nomefile | tail -5
 +
</nowiki>
 +
</pre>
 +
 +
=== Spiegazione ===
 +
# Il sed e' un potente editor di flussi. Il comando qui sopra dice: '''-n''' fa solo quel che ti chiedo esplicitamente (altrimenti copia in output ogni riga che riceva in input); '''5,10p''' butta in output le righe da 5 a 10; '''10q''' alla decima riga esci senza leggere altro dal file
 +
# leggi le prime 10 righe da nomefile, crea una pipe e passa tutto a tail, che tiene solo le ultime 5.<BR>
 +
'''NOTE''': la prima versione e' piu' efficiente perche' non crea pipe e legge le prime 10 righe solo una volta.
 +
 +
== Scartare le prime righe da un file ==
 +
<pre>
 +
<nowiki>
 +
1. tail +10 nomefile
 +
2. sed -n '10,$p' nomefile
 +
</nowiki>
 +
</pre>
 +
 +
=== Spiegazione ===
 +
# tail accetta anche +n come argomento, non solo -n! '''tail +n''' significa proprio dammi la coda del file dalla riga 10 in poi
 +
# l'unica cosa nuova rispetto al comando sopra e' il segno '''$''' che sta ad indicare l'ultima riga

Versione delle 18:53, 24 gen 2005

Eliminazione file mp3 di tutti gli utenti :)

1. find /home -name '*.mp3' -print0 | xargs -0r rm -f 
2. find /home -iname '*.mp3' -exec rm {} \; 

Spiegazione

  1. Cerca nella cartella /home (e nelle sue sottodirectory) i file con estensione mp3 e stampali separati da carattere nullo (0x00) (quindi funziona anche con nomi con spazi). Passa il tutto a xargs che controlla che l'elenco, separato da caratteri nulli (-0), non sia vuoto (-r) e rimuove i file senza pieta' (-f), invocando una sola volta il comando rm (piu' veloce di un ciclo for o della seconda versione qui sotto).
  2. Cerca i file *.mp3 in modo case insensitive (-iname) e per ogni file trovato esegui il comando rm NOMEFILE (in quanto le parentesi graffe vengono sostituite con il nome del file trovato). Per rimuovere i file chiedendo prima conferma, basta aggiungere il parametro -i di rm, ovvero rm -i {} \;

Creazione in automatico di directory :)


echo "for(c=0;c<10;++c){\"prova\";c}" | bc | xargs mkdir

Spiegazione

Il comando bc (e' nello standard posix) e' una potente calcolatrice programmabile. Se gli si butta qualcosa nello stdin lui restituisce gentilmente il risultato in stdout. Il ciclo for che gli passiamo crea semplicemente le stringhe prova1, prova2, ecc. separate da a capo.
Il mkdir crea quindi le directory.
Attenzione: cosi' com'e' non funziona con nomi che contengono spazi.

Selezione di righe da un file


1. sed -n '5,10p;10q' nomefile
2. head -10 nomefile | tail -5

Spiegazione

  1. Il sed e' un potente editor di flussi. Il comando qui sopra dice: -n fa solo quel che ti chiedo esplicitamente (altrimenti copia in output ogni riga che riceva in input); 5,10p butta in output le righe da 5 a 10; 10q alla decima riga esci senza leggere altro dal file
  2. leggi le prime 10 righe da nomefile, crea una pipe e passa tutto a tail, che tiene solo le ultime 5.

NOTE: la prima versione e' piu' efficiente perche' non crea pipe e legge le prime 10 righe solo una volta.

Scartare le prime righe da un file


1. tail +10 nomefile
2. sed -n '10,$p' nomefile

Spiegazione

  1. tail accetta anche +n come argomento, non solo -n! tail +n significa proprio dammi la coda del file dalla riga 10 in poi
  2. l'unica cosa nuova rispetto al comando sopra e' il segno $ che sta ad indicare l'ultima riga