使用循环变量名重命名文件

Gre*_*.D. 2 bash loops rename

我正在尝试下载一堆文件,并在我去的时候重命名它们.下载部分工作正常,但我不能让它重命名文件.这是我正在使用的脚本:

COUNTER=0
for (( i = 696; i <= 773; i++ ))
  do
  fastq-dump --split-3 --accession SRR546$i
mv SRR546"$i"_1 ./"$COUNTER"mVD_SRR546$i_1
mv SRR546"$i"_2 ./"$COUNTER"mVD_SRR546$i_2
gzip *.fastq

COUNTER=$[COUNTER + 1]
done
Run Code Online (Sandbox Code Playgroud)

这将正确下载文件SRR546696,SRR546697等,但不会重命名它们.

我也试过用:

rename 's/SRR/"$COUNTER"mVD_SRR/' *.fastq
Run Code Online (Sandbox Code Playgroud)

但这也没有做任何事.

cod*_*ter 5

您需要双引号参数以防止单词拆分和通配.同时,您需要使用以下内容保留变量名称{}:

counter=0
for ((i = 696; i <= 773; i++)); do
  fastq-dump --split-3 --accession "SRR546$i"
  mv "SRR546${i}_1" "./${counter}mVD_SRR546${i}_1"
  mv "SRR546${i}_2" "./${counter}mVD_SRR546${i}_2"
  gzip *.fastq
  ((counter++))
done
Run Code Online (Sandbox Code Playgroud)

您可以使用变量来保存该字符串并使您的代码更具可读性,而不是在很多地方对"SRR546"进行硬编码:

counter=0 srr="SRR546"
for ((i = 696; i <= 773; i++)); do
  fastq-dump --split-3 --accession "$srr$i"
  mv "$srr${i}_1" "./${counter}mVD_${srr}${i}_1"
  mv "$srr${i}_2" "./${counter}mVD_${srr}${i}_2"
  gzip *.fastq
  ((counter++))
done
Run Code Online (Sandbox Code Playgroud)

改进:

  • 使用小写作为正常变量(计数器而不是COUNTER)
  • 使用引号来防止单词拆分和通配(虽然不是你问题中的问题,因为变量包含一个数字,没有空格或其他元字符
  • 使用一组双引号而不是多个单引号
  • 使用++运算符递增计数器在((counter++)((...))是一个更好的语法$[ ... ]

您可能希望在代码中添加错误检查.

有关