下面是11月学员的投稿
下载的数据长这样,存放在我的/bioinformatics/ICGC/SpecimenCentric文件下:
(base)mk@mk:/bioinformatics/ICGC/SpecimenCentric$ ls
发现每个文件名的前缀奇怪的的命名,每个文件最前面多了 sp%2F字符。当然,对于使用惯windows的童鞋,当然是右键→重命名,一个个重复命名就好了。好在文件总共11个,一个个右键重命名也不外乎一两分钟的事。但是问题来了,要是下载的文件成百上千,甚至上万个呢?还是这样笨拙的一个个右键→重命名?跟过Jimmy老师学习过都知道,当然是编程思维解决问题啦。我使用的是Ubuntu Kylin,于是乎,废话不多说,开始实操。
思维就是,grep把"sp%2F"适配出来,然后sed批量替换,最后通过while循环,mv批量重命名。
第一步:需要注意 %符号,要用反斜杠(\)转义
ls|grep 'sp\%2F'
ls|grep 'sp\%2F'|sed s/sp\%2F//g
把最终想要的文件名重定向于file.txt,并查看file.txt,确认最终想要的文件名称。
ls|grep 'sp\%2F'|sed s/sp\%2F//g >file.txt
cat file.txt
第二步,把‘sp%2F’赋值给变量a,方便后续调用(注意,此时不需要转义符(\))。
a='sp%2F'
第三步,检查并构建最后批量重命名命令(mv,while,变量调用),确保无误:
cat file.txt|while read id;do echo "mv $a$id $id";done
可见,变量
id顺利正确调用,mv命令后面旧新文件完全匹配正确。
第四步:把构建好的最终批量调用的命令重定向至file2.txt,后续while循环读取。此时需要会用vim编辑器。
touch file2.txt;vim file2.txt
最后,开始批量完成最终操作:
cat file2.txt|while read id;do $id;done
最后ls检查最终结果:
大功告成。
心得:正如Jimmy老师所说,编程的能力就是解决实际问题能力。要善于发现规律,通过共有规律来批量操作。
大家赶紧去Linux命令行测试一下吧!