Tengo algunos archivos como este:
database1-backup-01-01-2011.sql
database2-backup-01-01-2011.sql
... etc. Quiero cambiarles el nombre para agregar AM, así:
database1-backup-01-01-2011-AM.sql
database2-backup-01-01-2011-AM.sql
¿Cuál es la forma más concisa de hacerlo desde bash shell?
Prueba este pequeño script:
Acabo de escribir eso desde la memoria, así que si no funciona al 100%, no me culpes (es decir, haz una copia de seguridad de tus datos primero;))
Cómo funciona:
Recopile todos los archivos en una variable (podría poner esto dentro de for en su lugar, pero me gusta mantener las cosas fáciles de leer):
Recorre cada archivo:
Obtenga el nombre de archivo sin .sql:
Cambie el nombre del archivo, agregando -AM.sql al nombre base:
fuente
FILES=`ls *.sql`
y reemplazar${FILES}
por*.sql
, el desarrollo del forro se hará cargo de la búsqueda de los archivos.ls
comando. Mantenlo simple. Por cierto, creo que{
son tímidos, es mejor reemplazarlos pordo
ydone
:for ...; do ...; done
FILES=`ls *.sql`
<- ahí. La expansión de Shell está incorporada, no es necesario este extrals
.ls..
es solo una fuente de archivos que el script podría manejar; sería trivial cambiarlo para usar, por ejemplo, una lista predefinida de archivos o argumentos de línea de comando, simplemente editando esta variable. No es necesario cambiar la estructura de for si desea darle otro uso al script. ¿No es ese el punto de este sitio? ¿Dar respuestas que sean de interés para la población general? Si eso significa hacer que sus guiones sean un poco más verbales y un poco más comprensibles, entonces no veo ningún problema,ls..
ya que muestra implícitamente en qué se está trabajando.Usando la versión del script Perl de
rename
:Usando la
util-linux-ng
versión derename
(pero solo si ".sql" solo aparece al final del nombre del archivo):Utilizando
mmv
:fuente
Como se sugirió un script de Perl, aquí hay un script de Ruby para hacer lo mismo:
fuente