Мои проекты разделены на три каталога: данные, сценарии и результаты. Основной конвейер вызывается из каталога в верхней части этих трех каталогов. Данные содержат ряд подкаталогов, по которым я хочу выполнить цикл, восстановить их имена и, чтобы сохранить порядок, создать новые каталоги с тем же именем в результатах. Я делаю это с помощью следующего скрипта:
for d in data/*
do
newname=$(echo $d | cut -f2 -d /)
mkdir /results/$newname
myprogram $d/raw_data > ../results/$newname/output
done
которая делает эту работу, но я нахожу неуклюжим необходимость вырезать имя каталога и создать дополнительную переменную. Есть ли более элегантный способ сделать это? Способ, которым я могу получить имя подкаталога за один шаг, чтобы я мог сделать что-то вроде:
for d in (??????)
do
mkdir /Results/$d
myprogram Data/$d/rawdata > results/$d/output
done
РЕДАКТИРОВАТЬ Я только что пришел с этой идеей для первой строки, которая довольно хорошо работает со вторым фрагментом кода
for d in $(ls -d data/* | cut -f2 -d /)
У кого-нибудь есть лучшее предложение?