Script Bash de Linux: ordenar archivos secuenciales en carpetas secuenciales

Script Bash de Linux: ordenar archivos secuenciales en carpetas secuenciales

Tengo una secuencia de miles de archivos con el siguiente nombre:

file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.

Me gustaría ordenar los archivos en una carpeta con el siguiente nombre:

dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)

Sé que puedo reducir el tiempo que me lleva hacer esto mediante una línea como:

mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done

Pero lo anterior sólo reducirá ligeramente el tiempo de clasificación. ¿Cómo puedo automatizar toda la operación de clasificación?

Sé que necesito hacer algo con let N++ pero no estoy seguro de cómo incorporarlo.

Respuesta1

Esto debería funcionar. Primero, creé archivos de prueba como este:

touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02

Se confirmó que existían usando ls -1y el resultado se veía así:

file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02

Luego ejecuté este script Bash dentro del directorio que contiene esos archivos:

find . -type f |\
  while read FULL_FILE_PATH
  do
    FIRST_TWO_DIGITS=$(echo "${FULL_FILE_PATH}" | grep -Eo '[[:digit:]]{2}-[[:digit:]]{2}');
    if [ ! -z "$FIRST_TWO_DIGITS" -a "$FIRST_TWO_DIGITS" != " " ]; then
      DIR=dir"${FIRST_TWO_DIGITS}";
      mkdir -p "${DIR}";
      mv "${FULL_FILE_PATH}" "${DIR}";
    fi
  done

Una vez hecho esto, verifiqué el directorio de ls -1esta manera y aquí está el resultado devuelto:

dir01-01
dir01-02
dir02-01
dir02-02

Entonces, los directorios están ahí, pero para confirmar que los archivos fueron copiados ejecuté ese lscomando con algo *como este: ls -1 *. Y aquí está el resultado:

dir01-01:
file01-01-01
file01-01-02

dir01-02:
file01-02-01
file01-02-02

dir02-01:
file02-01-01

dir02-02:
file02-02-02

información relacionada