Bash Shell Script для перебора папок внутри папки и копирования файлов
Я хочу перебрать несколько каталогов в каталоге и скопировать конкретный CSV-файл в другое место. Мои знания сценариев оболочки находятся на начальном уровне. Я нашел пару решений, похожих на то, что я думаю сделать, но проблема в моем случае имя подкаталога не то же самое.
Вот структура: у меня есть корневой каталог ~/2013-03-03/
Затем у меня есть следующие каталоги, я поставил только несколько, но у меня есть около 300 подкаталогов.
ab bar ch eml gn iu kv mhr ne pfl sc sw ug zea
ace bat-smg chr ext got jbo kw mi nov pi scn szl ur zh-classical
af bcl chy ff gu kaa ky ml nrm pih sco tet ve zh-min-nan
ak bh ckb fiu-vro gv kab lad mn nso pnb sd tg vec zh-yue
als bi co fj ha kbd lbe mo nv pnt se ti vep
В каждом из этих каталогов есть сотни (s) файлов CSV, в которых имя csvfile начинается с имени каталога. Но меня интересует только один конкретный CSV-файл. Предположим, что имя mycsvfile.csv. Я хочу скопировать этот файл из каждого подкаталога в другой каталог в ~/2013-03-03/new_dir
2 ответа
find ~/2013-03-03/ -name 'mycsvfile.csv' -exec cp {} ~/2013-03-03/new_dir/ \;
Если файлы названы subfoldername/subfoldername-mycsvfile.csv
, используйте что-то вроде:
find ~/2013-03-03/ -regextype posix-awk -regex '.*/([^/]*)/\1-mycsvfile.csv' -exec cp {} ~/2013-03-03/new_dir/ \;
... Я всегда борюсь с тем, что может сделать регулярное выражение аромата, что и как, кажется, это работает
Вероятно, есть много способов сделать это. Вот один относительно простой:
cd ~/2013-03-03
/bin/ls -1 */mycsvfile.csv | cpio -dump ~/2013-03-03/new_dir/.