Как создать цикл для копирования серии файлов в совместимые папки?

Как создать цикл для копирования серии файлов в совместимые папки?

Например, файлы, начинающиеся с номера 1, в папке номер 1 и т. д., я могу сделать это для каждого из них с помощью следующей команды:

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

решение1

Вы имеете в виду что-то вроде этого (от 1 до 100)?

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

решение2

В исходном каталоге запустите этот скрипт:

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%%_*}самый длинный совпадающий шаблон суффикса. В этом случае это будут все символы перед первым _. Результатом замены для имени 1_2_3.niiбудет cp 1_2_3.nii 1/.

Это решение более гибкое, поскольку оно автоматически создает необходимые папки и нет необходимости указывать префикс диапазона файлов.

Связанный контент