2015-04-10 2 views
0

У меня есть много файлов, которые разбросаны более 300 каталогов в систематическом порядке:назначая переменные, содержащие числа динамически в BASH

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 

я попытался с помощью в различных реализациях PRINTF согласно этой теме SPRINTF in shell scripting?. Я также попытался использовать как% i,% s, так и% d в вызове PRINTF, но путь, который генерируется для 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 (=) команда не найдена» ошибка

Приветствия!

ответ

3

%03d это формат вам нужно:

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

Почему вы не можете просто

cp GA*/curve_1/pdbs/* allPDB/ 
+0

Doh! не думал об использовании двух диких карт - спасибо! – DonMP