Bash Shell脚本遍历文件夹内的文件夹和复制文件
问题描述:
我想遍历目录中的多个目录并将特定的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
答
可能有很多方法可以实现这个目标。下面是一个相对简单的一个:
cd ~/2013-03-03
/bin/ls -1 */mycsvfile.csv | cpio -dump ~/2013-03-03/new_dir/.
答
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/ \;
......我一直挣扎是什么味道正则表达式可以做什么和怎么样,这似乎工作
如果csv文件名称正在更改示例subdirname-mycsvfile.csv – 2013-03-07 21:22:29
如何添加此问题。 – 2013-03-07 21:23:44
这使它有很大的不同,增加了一个答案,但我不太确定这是一个最佳解决方案。 – Wrikken 2013-03-07 21:57:53