重命名倍数与一个bash循环文件 [英] Renaming multiples files with a bash loop

查看:208
本文介绍了重命名倍数与一个bash循环文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要重新命名45文件,而我并不想这样做,一个接一个。这些文件名:

I need to rename 45 files, and I don't want to do it one by one. These are the file names:

chr10.fasta         chr13_random.fasta  chr17.fasta         chr1.fasta          chr22_random.fasta  chr4_random.fasta  chr7_random.fasta  chrX.fasta
chr10_random.fasta  chr14.fasta         chr17_random.fasta  chr1_random.fasta   chr2.fasta          chr5.fasta         chr8.fasta         chrX_random.fasta
chr11.fasta         chr15.fasta         chr18.fasta         chr20.fasta         chr2_random.fasta   chr5_random.fasta  chr8_random.fasta  chrY.fasta
chr11_random.fasta  chr15_random.fasta  chr18_random.fasta  chr21.fasta         chr3.fasta          chr6.fasta         chr9.fasta         
chr12.fasta         chr16.fasta         chr19.fasta         chr21_random.fasta  chr3_random.fasta   chr6_random.fasta  chr9_random.fasta
chr13.fasta         chr16_random.fasta  chr19_random.fasta  chr22.fasta         chr4.fasta          chr7.fasta         chrM.fasta

我需要更改扩展名.fasta到.fa。我试图写一个bash脚本来做到这一点:

I need to change the extension ".fasta" to ".fa". I'm trying to write a bash script to do it:

for i in $(ls chr*)

do

NEWNAME = `echo $i | sed 's/sta//g'`

mv $i $NEWNAME

done

但它不工作。你能告诉我为什么,或给另一个快速的解决方案?

But it doesn't work. Can you tell me why, or give another quick solution?

谢谢!

推荐答案

下面几个误区:


  • NEWNAME = 应该没有空间。这里的bash正在寻找一个名为命令 NEWNAME 和失败。

  • 您解析LS的输出。这是不好的,如果你有带空格的文件。 Bash可以建立自己的水珠运营文件 *
  • 列表
  • 您不要逃避$ I$ NEWNAME。如果其中包含空格它使两个参数的MV。

  • 如果一个文件名以破折号开头 MV 会认为这是一个开关。使用 - 停止参数处理

  • NEWNAME = should be without space. Here bash is looking for a command named NEWNAME and that fails.
  • you parse the output of ls. this is bad if you had files with spaces. Bash can build itself a list of files with the glob operator *.
  • You don't escape "$i" and "$NEWNAME". If any of them contains a space it makes two arguments for mv.
  • If a file name begins with a dash mv will believe it is a switch. Use -- to stop argument processing.

尝试:

for i in chr*
do
  mv -- "$i" "${i/%.fasta/.fa}"
done

for i in chr*
do
  NEWNAME="${i/%.fasta/.fa}"
  mv -- "$i" "$NEWNAME"
done

%{VAR /%PAT /换货} 查找只在变量的结束的并用替换

这篇关于重命名倍数与一个bash循环文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆