GNU/Linux >> Tutoriales Linux >  >> Linux

Script de shell de Linux para agregar ceros iniciales a los nombres de archivo

Usando el rename (prename en algunos casos) script que a veces se instala con Perl, puede usar expresiones de Perl para cambiar el nombre. El script omite el cambio de nombre si hay una colisión de nombres.

El siguiente comando cambia el nombre solo de los archivos que tienen cuatro o menos dígitos seguidos de una extensión ".txt". No cambia el nombre de los archivos que no se ajustan estrictamente a ese patrón. No trunca los nombres que constan de más de cuatro dígitos.

rename 'unless (/0+[0-9]{4}.txt/) {s/^([0-9]{1,3}\.txt)$/000$1/g;s/0*([0-9]{4}\..*)/$1/}' *

Algunos ejemplos:

Original    Becomes
1.txt       0001.txt
02.txt      0002.txt
123.txt     0123.txt
00000.txt   00000.txt
1.23.txt    1.23.txt

Otras respuestas dadas hasta ahora intentarán cambiar el nombre de los archivos que no se ajustan al patrón, producir errores para los nombres de archivo que contienen caracteres que no son dígitos, realizar cambios de nombre que producen colisiones de nombres, intentar y fallar al cambiar el nombre de los archivos que tienen espacios en sus nombres y posiblemente otros problemas.


De una sola línea:

ls | awk '/^([0-9]+)\.txt$/ { printf("%s %04d.txt\n", $0, $1) }' | xargs -n2 mv

¿Cómo uso grep para hacer coincidir solo las líneas que contienen \d.txt (es decir, 1 dígito, luego un punto, luego las letras txt)?

grep -E '^[0-9]\.txt$'

Prueba:

for a in [0-9]*.txt; do
    mv $a `printf %04d.%s ${a%.*} ${a##*.}`
done

Cambie el patrón de nombre de archivo ([0-9]*.txt ) según sea necesario.

Un cambio de nombre enumerado de propósito general que no hace suposiciones sobre el conjunto inicial de nombres de archivo:

X=1;
for i in *.txt; do
  mv $i $(printf %04d.%s ${X%.*} ${i##*.})
  let X="$X+1"
done

Sobre el mismo tema:

  • Script Bash para rellenar nombres de archivos
  • Extraer nombre de archivo y extensión en bash

for a in *.txt; do
  b=$(printf %04d.txt ${a%.txt})
  if [ $a != $b ]; then
    mv $a $b
  fi
done

Linux
  1. Inserte varias líneas de datos en un archivo después de que el patrón coincida con el script de shell de Linux

  2. ¿Cómo crear un archivo temporal en Shell Script?

  3. ¿Cómo cambiar el nombre de un archivo en Linux?

  4. Cómo cambiar una palabra en un archivo con script de shell de Linux

  5. no se puede ejecutar un archivo binario cuando se intenta ejecutar un script de shell en Linux

Cómo cambiar el nombre de un archivo (s) en Linux

Cómo ejecutar Shell Script como servicio Systemd en Linux

Imprimir el tiempo de ejecución de la secuencia de comandos de Shell en Linux

¿Qué es Shebang en Linux Shell Scripting?

Cómo verificar si existe un grupo y agregarlo si no existe en Linux Shell Script

¿Plantillas con Linux en un script de Shell?