2009-09-30 7 views

Respuesta

30

probar este (esto funciona en el viejo y simple Bourne sh así):

for i in *000.tga 
do 
    mv "$i" "`echo $i | sed 's/000//'`" 
done 

Ambos argumentos se envuelven entre comillas para apoyar en espacios los nombres de archivo.

+0

+1 para la mayoría de las soluciones portátiles (y porque me estoy quedando sin mucho valor para las votaciones ascendentes para mantener el voto alcista _todas las buenas respuestas). –

33

Bash puede hacer sed -como sustituciones:

for file in *; do mv "${file}" "${file/000/}"; done 
+0

funciona muy bien en OS X (10.6.8). Práctico y sucinto. Gracias. – jamesnotjim

+0

Bien, ¿puedes explicar la función de "{"? – efrem

+0

@efrem: las llaves son un delimitador opcional para nombres de variables y son necesarias para la expansión de parámetros. Consulte el [Manual de Bash] (https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion) para obtener más información. –

8

una solución no bash, ya que sé dos carteles rápidos ya han cubierto que:

Hay un excelente programa corto Perl llamado rename que se instala por defecto en algunos sistemas (otros tienen un programa de cambio de nombre menos útil) . Se le permite utilizar expresiones regulares Perl para su cambio de nombre, por ejemplo:

rename 's/000//' *000*.tga 
4
#!/bin/bash 
ls | while read name; do 
    echo mv $name ${name/$1//} 
done 
+1

+1: Me encanta el '| mientras lee el constructo. – Cascabel

+3

¿Cómo es "ls | while read name" mejor que "for name in *"? –

+0

@Laurence Gonsalves: el uso de comodines de shell expande la línea de comandos, y no hay un límite tan grande allí. "mientras se lee" evita que – Javier

Cuestiones relacionadas