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/.
Другие вопросы по тегам