У меня есть несколько каталогов с уникальными именами идентификации. В каждом из них далее identicle подкаталоги, сгенерированные автоматизированным аналитическим программным обеспечением. В одном из этих подкаталогов файл, который я хочу выбрать и переместить в уникальный dir, называя их в честь их соответствующего родительского каталога.
Например:
Каталоги = A001 A002 A003 A004
Подкаталоги = A001/files A002/files A003/files A004/files
Идентичное имя файла в каждом подкаталоге = A001/files/aseg.mgz A002/files/aseg.mgz и т.д. и т.д.
Уникальный новый каталог = collated_aseg
Я хочу переместить все aseg.mgz файлы в collated_aseg dir, и переименовать их так они идентифицируются как прибывающий из исходного родительского каталога: например, A001_aseg.mgz (или эквивалентный).
Я посмотрел на подобные проблемы (Переименуйте файл к названию родительского каталога в терминале) - однако, они имеют только один слой каталога, тогда как моя проблема имеет два. Я задавался вопросом, могло ли это быть легко сделано.
Так как промежуточное имя каталога является по-видимому постоянным, это должно быть просто с циклом оболочки:
for d in A???; do echo cp "$d/files/aseg.mgz" "collated_aseg/$d.mgz"; done
Удалите echo
после того как Вы рады, что это делает правильную вещь. collated_aseg
каталог должен уже существовать. Замена cp
с mv
если Вы действительно хотите переименовать (перемещают), а не копируют.