我正在尝试下载一堆文件并在重命名时将其重命名。下载部分可以正常工作,但是我无法重命名文件。这是我正在使用的脚本:
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等,但不会重命名它们。
我也尝试使用:
rename 's/SRR/"$COUNTER"mVD_SRR/' *.fastq
但这也不起作用。
答案 0 :(得分: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
您可以使用变量来保存该字符串并使代码更具可读性,而不是在很多地方对“ 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
改进:
((counter++)
中那样递增计数器,并且((...))
比$[ ... ]
要better syntax 您可能想在代码中添加error checking。
答案 1 :(得分:0)
将变量名与字符串结合使用时,仅应用字符串加引号:
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