Чтение имен файлов с помощью цикла for в скрипте оболочки - PullRequest
0 голосов
/ 26 февраля 2019

В моей папке имена файлов выглядят так:

A00001
A00002
.
.
.
A08525

Я хочу добавить это имя файла в качестве аргумента:

max = 8525
for i in `seq 2 $max`
do
    python script.py -r filename 
done

Я пытался так:

max = 8525
for i in `seq 2 $max`
do
    python script.py -r "A0000$i" #But this work for 1-9 like wise for A000 it will work for 100-999
done

Я не могу сделать

for file in A*; 
do 
    echo "$file"; done
done

Поскольку папка имеет один и тот же файл с тремя различными расширениями, такими как A0000.txt, A0000.pdf, A0000.png, и я хочу ввести только A0000 в качестве аргумента.

Как мне написать цикл for, чтобы я мог прочитать все имена файлов?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Большинство (?) Версий seq будут поддерживать вывод значений с добавлением 0.

max=8525
for i in $(seq -w 2 $max); do
  python script.py -r "A$i"
done

В качестве альтернативы, вы можете просто зациклить существующие файлы и удалить расширение.

for f in A*.txt; do
  f=${f%.txt}
  python script.py -r "$f"
done    
0 голосов
/ 26 февраля 2019

Вы можете использовать printf для заполнения числа начальными нулями.

for ((i=1; i<=8525; ++i)); do
    printf -v filename "A%05i" "$i"
    python script.py -r "filename"
done

Конечно, если базовые имена файлов уже существуют, вы можете сделать

for f in A[0-9][0-9][0-9][0-9][0-9].png; do
    filename=${f%.png}
    python script.py -r "$filename"
done

, что аккуратноизбегает жесткого кодирования верхнего предела.

0 голосов
/ 26 февраля 2019
for file in $(find /path/to/your/files -type f -name "A?????");do python script.py -r "$file"; done
...