我要做的是重命名大约100,000个具有代码名称的Gzip压缩数据文件(例如:XG453834.fasta.gz).我想把它们命名为易于阅读和解析的东西(例如:Xanthomonas_galactus_str_453.fasta.gz).
我试过使用sed,rename和mmv,但无济于事.如果我在一次性脚本上使用任何这些命令,那么它们工作正常,就在我尝试将变量合并到shell脚本中时,我遇到了问题.我没有收到任何错误,只是没有更改名称,所以我怀疑这是一个I / O错误.
这是我的文件的样子:
#! /bin/bash# change a bunch of file namesfile=names.txtwhile IFS=' ' read -r r1 r2;do mmv ''$r1'.fasta.gz' ''$r2'.fasta.gz' # or I trIEd many versions of: sed -i 's/"$r1"/"$r2"/' *.gz # and I trIEd many versions of: rename -i 's/$r1/$r2/' *.gzdone < "$file"
…这里是我的txt文件的第一行,带有单个空格分隔符:
cat names.txt #find #replace code1 name1 code2 name2 code3 name3
我知道我可以用python或perl来做这件事,但是由于我在这里工作这个特定的脚本我想找到一个简单的解决方案来修复这个bash脚本并弄清楚我做错了什么.非常感谢您提供任何帮助.
此外,我试图捕获名称文件(请参阅下面的Ashoka Lella的评论),然后使用awk移动/重命名.一些文件具有变量名称(但总是以代码开头),所以我正在寻找一个查找和放大器.替换选项只是用“名称”替换“代码”并保留文件名结构.
我怀疑我没有在perl表达式的单个tick中转义变量,但是我已经倾注了很多手册,我找不到这样做的方法.
解决方法 如果您完全确定文件名不包含制表符空格,则可以尝试下一个xargs -n2 < names.txt echo mv
这是为了DRY运行(只打印将要执行的 *** 作) – 如果您对结果满意,请删除回声…
如果要检查目标是否存在,请使用
xargs -n2 < names.txt echo mv -i
如果你想永远不允许覆盖目标使用
xargs -n2 < names.txt echo mv -n
再次,如果你满意,删除回声.
总结以上是内存溢出为你收集整理的regex – 使用perl表达式批量重命名文件全部内容,希望文章能够帮你解决regex – 使用perl表达式批量重命名文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)