Tengo múltiples archivos secuenciales que nombran en un directorio con múltiples extensiones de archivos incrementales. Mi objetivo es usar el comando Cambiar nombre para cambiar el nombre de la extensión del archivo.

IBM0020.DAT_001
IBM0020.DAT_002
IBM0020.DAT_003
IBM0021.DAT_001
IBM0021.DAT_002
IBM0022.DAT_001
IBM0022.DAT_002
IBM0022.DAT_003
IBM0022.DAT_004
...

Para

IBM0020.DAT_001
IBM0020.DAT_002
IBM0020.DAT_003    
IBM0021.DAT_004
IBM0021.DAT_005
IBM0022.DAT_006
IBM0022.DAT_007
IBM0022.DAT_008
IBM0022.DAT_009
...

Me he secado el comando a continuación, pero no el resultado esperado. Quiero conservar el nombre de archivo y solo cambiar el nombre / cambiar la extensión con la secuencia de números de ejecución.

rename -n 's/.+/our $i;sprintf(".DAT_%03d",1+$i++)/e' *
IBM0020.DAT_001 renamed as .DAT_001
IBM0020.DAT_002 renamed as .DAT_002
IBM0020.DAT_003 renamed as .DAT_003
IBM0021.DAT_001 renamed as .DAT_004
IBM0021.DAT_002 renamed as .DAT_005
IBM0022.DAT_001 renamed as .DAT_006
IBM0022.DAT_002 renamed as .DAT_007
IBM0022.DAT_003 renamed as .DAT_008
IBM0022.DAT_004 renamed as .DAT_009

Gracias por cualquier ayuda.

0
emilee 28 jun. 2019 a las 05:58

1 respuesta

La mejor respuesta

Continuando desde el comentario, si todos sus archivos tienen .DAT_XXX como la extensión que desea cambiar el nombre de forma secuencial, entonces no es necesario incluir ".DAT_" como parte del patrón que está haciendo coincidir. Simplemente coincida con los 3 dígitos al final del nombre de archivo y cambie esos, por ejemplo

rename 's/\d{3}$/our $i; sprintf("%03d", 1+$i++)/e' *

Si ".DAT_" no es único, y tiene otras extensiones que terminan en 3 dígitos que desea evitar cambiar de nombre, puede incluir "DAT_" como parte del patrón coincidido y reemplazado, por ejemplo, por ejemplo.

rename -n 's/DAT_\d{3}/our $i; sprintf("DAT_%03d", 1+$i++)/e' *

( Note: Hay dos utilidades diferentes "rename" en uso común en Linux, el primero proporcionado como parte del paquete util-linux no es compatible con el cambio de nombre de REGEX, y luego { {X2}}, que tiene, eso es compatible con el cambio de nombre de PERL-REGEX).

1
David C. Rankin 28 jun. 2019 a las 04:46