熟练掌握 linux 各种命令以及管道的使用,无疑让工作效率大幅增加。笔者在做实验时,免不了各种文件的频繁操作,而且文件数量庞大,若以手工方式处理,效率低下不说,还容易出错。今天,结合一个具体实例场景,来谈谈 linux 中 xargs、cut 以及管道的使用。备忘之,分享之。
1.批量新建文件夹
在当前路径下新建两个文件夹,并进入 alltxt 文件夹,批量创建100个文件夹:
cd alltxt
mkdir {1..100}
为简便起见,文件夹命名为1至100,如下所示:
2.在新建的100个文件夹下批量新建6个文件
ls | xargs -i touch {}/1_1_1.txt
ls | xargs -i touch {}/1_1_2.txt
ls | xargs -i touch {}/1_1_3.txt
ls | xargs -i touch {}/1_1_4.txt
ls | xargs -i touch {}/1_1_5.txt
ls | xargs -i touch {}/1_1_6.txt
xargs 中的 -i 参数表示将 xargs 的每项名称一项一项赋值给 {}.
随便进入一个文件夹,查看是否创建成功:
现在的需求是,在 test 文件目录中创建同样的目录结构,且将 alltxt 中每个目录下的 1_1_3.txt 文件复制到对应文件夹中。
3.进入 test 目录,创建与 alltxt 目录相同的子目录结构
cd test/
ls ./../alltxt/ | xargs -i mkdir {}
4.查找并分割出想要的文件
find . -name *_1_3.txt | less
find . -name *_1_3.txt | cut -d / -f 2-3 | less
cut 中的 -d 参数表示自定义分隔符,默认为制表符;
cut 中的 -f 与 -d 一起使用,指定显示那个区域;
5.将指定文件复制到 test 中对应的文件夹中去
find . -name *_1_3.txt | cut -d / -f 2-3 | xargs -i cp {} ./../test/{}
随便进入 test 中的一个文件夹,查看显示结果:
到此,大功告成!