在 BASH 中动态分配包含数字的变量

assigning variables containing numbers dynamically in BASH

我有很多文件,系统地分散在300个目录中:

GA001/curve_1/pdbs/FILES
GA002/curve_1/pdbs/FILES
....
GA300/curve_1/pdbs/FILES

现在我需要将所有文件移动到同一个名为 allPDB 的文件夹中。我没有手动做,而是尝试编写一个 bash-脚本,但我显然很无能。我试图创建一个从 1 到 300 的循环,它更新文件所在的路径,但它不起作用。我的代码如下所示

#!/bin/bash

# loop running over the 300 dirs
for i in $(seq 1 300); do
        if $i<10; then
        printf -v mypath 'GA00%s/curve_1/pdbs' $i
        elif $i=>10  && $i<100; then
        mypath=$(printf 'GA0%s/curve_1/pdbs' $i)
        else
        mypath=$(printf 'GA%d/curve_1/pdbs' $i) 
        fi

echo $mypath # used to check the generated path
cp -pr $mypath/*.pdb allPDB/

done

我已尝试根据此线程 SPRINTF in shell scripting? 使用 PRINTF 的不同实现。我还尝试在 PRINTF 调用中同时使用 %i、%s 和 %d,但为 i=9 生成的路径是“GA9”而不是“GA009”。此外,我收到错误消息:

MovePDB.sh: line 5: 1: command not found
MovePDB.sh: line 7: 1=: command not found
GA1/curve_1/pdbs
cp: GA1/curve_1/pdbs/*.pdb: No such file or directory
MovePDB.sh: line 5: 2: command not found
MovePDB.sh: line 7: 2=: command not found
GA2/curve_1/pdbs
...
cp: GA98/curve_1/pdbs/*.pdb: No such file or directory
MovePDB.sh: line 5: 99: command not found
MovePDB.sh: line 7: 99=: command not found
GA99/curve_1/pdbs
cp: GA99/curve_1/pdbs/*.pdb: No such file or directory
MovePDB.sh: line 5: 100: command not found
MovePDB.sh: line 7: 100=: command not found
GA100/curve_1/pdbs
MovePDB.sh: line 5: 101: command not found
MovePDB.sh: line 7: 101=: command not found
GA101/curve_1/pdbs
MovePDB.sh: line 5: 102: command not found
MovePDB.sh: line 7: 102=: command not found

谁能帮帮我?我不明白“找不到 NUMBER(=) 命令”错误

干杯!

%03d是你需要的格式:

for i in {1..300} ; do
    printf 'GA%03d/curve_1/pdbs/\n' $i
done

为什么你不能

cp GA*/curve_1/pdbs/* allPDB/