2013-03-07 201 views
0

我想遍歷目錄中的多個目錄並將特定的csv文件複製到不同的位置。我的shell腳本知識處於初級階段。我發現幾個solutions類似於我在做的事情,但問題是在我的情況下,子目錄名稱不一樣。Bash Shell腳本遍歷文件夾內的文件夾和複製文件

這裏的結構:我的根目錄~/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 

這些目錄中的每一個都有數百個csv文件,其中csv文件名以該目錄的名稱開頭。但我只對一個特定的csv文件感興趣。假定名稱是mycsvfile.csv。我想將這個文件從每個子目錄複製到不同的目錄中~/2013-03-03/new_dir

回答

2

可能有很多方法可以實現這個目標。下面是一個相對簡單的一個:

cd ~/2013-03-03 
/bin/ls -1 */mycsvfile.csv | cpio -dump ~/2013-03-03/new_dir/. 
4
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/ \; 

......我一直掙扎是什麼味道正則表達式可以做什麼和怎麼樣,這似乎工作

+0

如果csv文件名稱正在更改示例subdirname-mycsvfile.csv – 2013-03-07 21:22:29

+0

如何添加此問題。 – 2013-03-07 21:23:44

+0

這使它有很大的不同,增加了一個答案,但我不太確定這是一個最佳解決方案。 – Wrikken 2013-03-07 21:57:53