Сортировка и классификация файлов по названию их компонентов (unix)

У меня есть папка с тысячами файлов в соответствии со следующей схемой именования:

'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').

Учитывая огромное количество файлов, я не знаю, с чего начать!

1
задан 6 October 2015 в 17:22

1 ответ

В ударе можно разделить имя файла к массиву:

#!/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.

1
ответ дан 7 October 2015 в 03:22
  • 1
    Я получаю это: XSERVTransSocketUNIXCreateListener:... SocketCreateListener () привел _XSERVTransMakeAllCOTSServerListeners к сбою: сервер, уже рабочий (EE) Фатальная ошибка сервера: (EE) не Может установить сокеты слушания - Удостоверяются X-сервер isn' t уже рабочий (EE) – OctaVIve 26 December 2016 в 06:24

Другие вопросы по тегам:

Похожие вопросы: