Come rinominare più file rimuovendo i caratteri in bash?


10

Devo rinominare più file nella directory rimuovendo i primi 5 caratteri per ciascun nome file.
Come posso farlo bash / shell? Sto usando Ubuntu 11.10. Grazie.

Risposte:


11

Un semplice ciclo per un po ' sedfarà il trucco:

% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbaz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxfoo  
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 bar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 foo

Il regex sostitutivo in seddice di corrispondere a qualsiasi cinque caratteri ( .significa qualsiasi carattere) all'inizio della stringa ( ^) e rimuoverlo.


9

Bash ha alcune incredibili possibilità di scripting. Ecco un modo:

for file in ??????*; do mv $file `echo $file | cut -c6-`; done

Un modo pratico per testare cosa farebbe è aggiungere un eco davanti al comando:

for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done

I sei punti interrogativi ti assicurano di provare solo a nomi di file più lunghi di 5 caratteri.


5

Puoi usare sed per farlo

for file in * ; do mv $file  $(echo $file |sed 's/^.\{5\}//g'); done

5

Tutte ottime risposte, grazie. Questo è ciò che ha funzionato nel mio caso:

rename 's/^.......//g' *

1

I miei due centesimi':

for file in *; do mv $file ${file:5}; done

${file:n}rimuove i primi ncaratteri nella stringa file.


risposta più elegante.
Sandwich
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.