¿Cómo puedo crear un bucle para copiar una serie de archivos a sus carpetas compatibles?

¿Cómo puedo crear un bucle para copiar una serie de archivos a sus carpetas compatibles?

Por ejemplo, archivos que comienzan con el número 1 hasta la carpeta número 1 y así sucesivamente…, puedo hacerlo para cada uno usando el siguiente comando:

find /home/ -name '1_*_*_*_*_*_*.nii' -exec cp '{}' /home/1 ';'

Respuesta1

¿Te refieres a algo como esto (1 a 100)?

for i in {1..100}; do
  find /home/ -name "${i}_*_*_*_*_*_*.nii" -exec cp '{}' /home/${i} \;
done

Respuesta2

En el directorio de origen, ejecute este script:

for name in *.nii ; # find all files with a pattern and process its
do
  directory="${name%%_*}/"
  if [ ! -d "$directory" ]; then mkdir "$directory" ; fi # make directory if not exist
  cp "$name" "$directory" ; # copy file into the directory
done

${name%%_*}Elimina el patrón de sufijo coincidente más largo. En este caso serán todos los símbolos antes del primero _. El resultado de la sustitución del nombre 1_2_3.niiserá cp 1_2_3.nii 1/.

Esta solución es más flexible porque crea automáticamente las carpetas necesarias y no es necesario dar el prefijo del rango de archivos.

información relacionada