2013-03-07 159 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

相关问题