¿Cómo muevo números en nombres de archivo, en una operación de cambio de nombre por lotes?

13

He estado tratando de descubrir cómo cambiar el nombre de los archivos durante las últimas horas.

Tengo 2000 archivos que son así:

file.1.pdb
file.2.pdb
file.3.pdb

Me gustaría cambiar el nombre de estos archivos a algo como:

file.pdb.1
file.pdb.2
file.pdb.3
user812758
fuente
¿No quisiste decir bash ?
avazula
44
@avazula No, por favor lea este artículo: en.wikipedia.org/wiki/Batch_renaming
Ali Razmdideh
@PerlDuck yes;)
Ali Razmdideh
2
Hola votantes cercanos: ¿realmente creen que solo necesitamos una pregunta en la etiqueta [cambio de nombre de lote]? ¿Hay algo en la publicación vinculada que realmente ayude con la tarea en esta pregunta, excepto la idea de usar rename? Me parece que si una pregunta de cambio de nombre de lote tiene detalles específicos, deberíamos proporcionarle respuestas específicas .
Zanna

Respuestas:

15

Si lo ha renameinstalado, puede usar

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

El comando renamese puede instalar a través de

sudo apt install rename
PerlDuck
fuente
11

A través de mmv(cambiar el nombre de varios archivos por patrones comodín) es muy fácil:

mmv '*.*.*' '#1.#3.#2' *.pdb

o zmvde zshconcha; Es un módulo que permite cambiar el nombre; ver ejemplos de ZMV :

zmv -w '*.*.*' '$1.$3.$2' *.pdb
αғsнιη
fuente
3
Ambos mmvy me zmvparecen bastante exóticos. ¿Te importa elaborar un poco lo que son y lo que hacen?
PerlDuck
2
Agregué enlaces a su página de manual y ejemplos.
αғsнιη
mmves genial Parece más adecuado para este tipo de cambio de nombre que rename, aunque es menos flexible en términos de coincidencia de nombres.
JAB
11

Usando Perl rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

Explicación rápida:

  • *.pdbCoincidir todos los archivos que terminan con .pdb. (Hecho por la cáscara)
  • (\.\d+)Haga coincidir un punto literal, luego uno o más dígitos decimales. Los padres crean un grupo de coincidencias.
  • $2$1 Invierte el primer y el segundo grupo de partidos.
  • -nSin acción (simular). Si el resultado se ve bien, ejecute el comando nuevamente sin este indicador.
wjandrea
fuente
1
Jajaja Mismo pensamiento. Eras 48 segundos más rápido.
PerlDuck
1
@PerlDuck Lol, sí, el mismo pensamiento. Las respuestas también se complementan bastante bien: cubres la instalación, cubro la sintaxis.
wjandrea
7

Puedes usar este script:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

O este comando amigable copiar y pegar:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

Para usar los comandos anteriores, coloque todos los 2000 archivos en una carpeta y luego abra la terminal en ese directorio, luego ejecute el comando anterior en él.

Ali Razmdideh
fuente
5

Recientemente, nautilus, el administrador de archivos predeterminado, recibió un cuadro de diálogo de cambio de nombre por lotes. Todavía no es lo suficientemente poderoso como para hacer lo que quieres. Pero afortunadamente existe Thunar, un administrador de archivos alternativo que se puede instalar. Con el diálogo de cambio de nombre de Thunars puedes hacer lo que quieras con la GUI.

Primero instale thunar:

sudo apt install thunar

Inicie thunar, navegue hasta el directorio que tiene sus archivos. Luego seleccione todos ellos. Presione F2.

En el cuadro de diálogo que se abre, nuevamente, seleccione todos los archivos. Cambie el modo a "Buscar y reemplazar" y a "Nombre y sufijo". Marque "Expresión regular". Ahora use lo siguiente como patrones de búsqueda y reemplazo:

file\.(.+)\.pdb

y

file.pdb.$1

Finalmente haga clic en el botón Cambiar nombre.

La ventaja de esta manera es que obtienes una vista previa visual de lo que sucederá antes de cambiar el nombre.

diálogo de cambio de nombre de Thunar

Sebastian Stark
fuente
1
Puede hacer que la mayoría de los programas impriman mensajes en inglés con el prefijo del comando LC_MESSAGES=POSIX, por ejemplo LC_MESSAGES=POSIX free. Funciona igual para aplicaciones gráficas, aunque en el caso de aplicaciones persistentes como Nautilus en su configuración predeterminada, nautilus -qprimero debe finalizar la instancia anterior .
David Foerster
@DavidFoerster gracias por mencionar, imagen reemplazada.
Sebastian Stark
3

Puede usar renamefrom util-linuxpara esto (el comando se llama rename.ulen ubuntu):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

Esto primero elimina la .pdbextensión desde el extremo y luego la vuelve a insertar en el medio.

user812791
fuente
1
Muy genial. No estaba al tanto rename.ul. La sintaxis es un poco, um, inesperada, pero en realidad funciona de la forma en que se anuncia. Además: también tiene un -ninterruptor (no tocar, solo decir).
PerlDuck