У меня есть папка с тысячами файлов в соответствии со следующей схемой именования:
'institute_model_scenario_river.txt'
Каждый компонент имен файлов (институт, модель , сценарий, река) являются переменными.
Затем я хотел бы отсортировать и классифицировать эти файлы по имени каждой переменной, кроме 'scenario'
и 'river'
.
Следовательно, каждое название института должно использоваться для создания соответствующего каталога. Эти каталоги должны состоять из подкаталогов, названных соответственно с разными «модельными» именами.
Чтобы быть более точным, я хотел бы привести небольшой пример, рассматривая следующие файлы:
wbm_gfdl_rcp4_mississippi.txt
matsiro_gfdl_rcp8_amazon.txt
wbm_miroc_rcp8_niger.txt
Я хотел бы создать каталог 'wbm'
с подкаталогами 'gfdl'
(содержащий следующий файл 'wbm_gfdl_rcp4_mississippi.txt'
) и 'miroc'
(содержащий следующий файл 'wbm_miroc_rcp8_niger.txt'
). И каталог 'matsiro'
, имеющий только подкаталог 'gfdl'
(содержащий 'matsiro_gfdl_rcp8_amazon.txt'
).
Учитывая огромное количество файлов, я не знаю, с чего начать!
В ударе можно разделить имя файла к массиву:
#!/bin/bash
for file in *_*_*_*.txt ; do
IFS=_ arr=($file)
dir=${arr[0]}/${arr[1]}
[[ -d $dir ]] || mkdir -p "$dir"
cp "$file" "$dir"/
done
Если Вы хотите переместиться, файлы вместо копируют их, используют mv
вместо cp
.