¿Cómo lo hago mv original.filename new.original.filename
sin volver a escribir el nombre del archivo original?
Me imagino poder hacer algo como mv -p=new. original.filename
o quizás mv original.filename new.~
o lo que sea, pero no puedo ver nada como esto después de mirar man mv
/ info mv
pages.
Por supuesto, podría escribir un script de shell para hacer esto, pero ¿no existe un comando / indicador existente para ello?
Podrías usar el
rename(1)
comando:Editar: si
rename
no está disponible y tiene que cambiar el nombre de más de un archivo, las secuencias de comandos de shell pueden ser realmente cortas y simples para esto. Por ejemplo, para cambiar el nombre de todos*.jpg
aprefix_*.jpg
en el directorio actual:fuente
rename 's/(.*).example/$1/' *.example
me salvó del tedio.$
en este escenario. Así que solo's/(.*)/new.$1/'
rename
El comando no funciona en mi máquina RHEL 6. ¿Existen diferentes versiones de este comando? Elfor ... done
trabajó para mí.Puede lograr un cambio de nombre de archivos múltiples compatible con Unix (usando comodines) creando un bucle for:
fuente
${file%%}
haces? Parece similar a simplemente $ {file}He visto a personas mencionar un
rename
comando, pero no está disponible de forma rutinaria en los sistemas Unix (a diferencia de los sistemas Linux, por ejemplo, o Cygwin; en ambos, el cambio de nombre es un ejecutable en lugar de un script). Esa versión derename
tiene una funcionalidad bastante limitada:Sustituye a la de la parte de los nombres de archivo con el que , y el ejemplo dado en la página del manual es:
Esto cambia el nombre de foo1 a foo01, y foo10 a foo010, etc.
Yo uso un script de Perl llamado
rename
, que originalmente saqué de la primera edición del libro de Camel, alrededor de 1992, y luego se extendió, para renombrar archivos.Esto le permite escribir cualquier comando sustituto o transliterado de Perl para asignar nombres de archivo. En el ejemplo específico solicitado, usaría:
fuente
pacman
el uso de:pacman -Sy perl-rename
. Luego agregue un alias en su bashrc:alias rename='perl-rename'
'.html
a los nombres de los archivos, use's/$/.html/'
- para eliminartmp
de todos los nombres de los archivos, use's/tmp//g'
(busquetmp
y reemplace con nada en todas partes).La forma más sencilla de cambiar el nombre de los archivos de forma masiva en el directorio es:
fuente
Si está abierto a una modificación, puede usar un sufijo en lugar de un prefijo. Luego, puede usar la función de tabulación para obtener el nombre de archivo original y agregar el sufijo.
De lo contrario, no, esto no es algo que sea compatible con el comando mv. Sin embargo, un script de shell simple podría hacer frente.
fuente
En mi caso, tengo un grupo de archivos que es necesario cambiar de nombre antes de poder trabajar con ellos. Cada archivo tiene su propia función en el grupo y tiene su propio patrón.
Como resultado, tengo una lista de comandos de cambio de nombre como este:
Prueba esto también:
Esto producirá todas las combinaciones con prefijos y sufijos:
Otra forma de resolver el mismo problema es crear una matriz de mapeo y agregar el prefijo corresponsal para cada tipo de archivo como se muestra a continuación:
fuente
Cambio de nombre masivo de archivos bash script
fuente
Sé que hay excelentes respuestas aquí, pero no encontré ninguna referencia para manejar las extensiones de nombre de archivo al agregar el sufijo.
Necesitaba agregar el sufijo '_en' a todos los
wav
archivos en una carpeta antes de la extensión del archivo.La magia esta aqui:
%.*
for filename in *.wav; do mv $filename ${filename%.*}_en.wav; done;
Si necesita manejar diferentes extensiones de archivo, verifique esta respuesta. Un poco menos intuitivo.
fuente