首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用循环变量名重命名文件

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

Stack Overflow用户
提问于 2019-02-12 01:38:24
回答 2查看 562关注 0票数 2

我正在尝试下载一堆文件,并在我进行重命名。下载部分工作正常,但我无法让它重命名文件。这是我正在使用的脚本:

代码语言:javascript
运行
复制
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

这将正确下载文件SRR546696、SRR546697等,但不会对它们进行重命名。

我还试着使用:

代码语言:javascript
运行
复制
rename 's/SRR/"$COUNTER"mVD_SRR/' *.fastq

但这也没什么用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-12 01:58:07

你需要双引号,以防止单词分裂和全球化。同时,您需要在{}中保留变量名。

代码语言:javascript
运行
复制
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

与在许多地方硬编码"SRR546“不同,您可以使用一个变量来保存该字符串,并使您的代码更具可读性:

代码语言:javascript
运行
复制
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

改进:

  • 用小写表示正常变量(计数器而不是计数器)
  • 使用引号来防止分词和分词(虽然在您的问题中不是一个问题,因为变量拥有一个数字,没有空格或其他元字符。)
  • 使用一组单引号而不是多个单引号。
  • 使用++运算符来增加计数器,就像在((counter++)((...))更好的语法而不是$[ ... ]

您可能需要将错误检查添加到代码中。

相关

票数 5
EN

Stack Overflow用户

发布于 2019-02-12 01:50:15

当将变量名称与字符串组合时,只应引用字符串:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54641654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档