在外壳程序脚本中使用for循环读取文件名

时间:2019-02-26 14:08:36

标签: shell loops sh

在我的文件夹中,文件名如下:

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.txtA0000.pdfA0000.png,并且我只想输入A0000作为参数。 / p>

如何编写for循环,以便可以读取所有文件名?

3 个答案:

答案 0 :(得分:3)

您可以使用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

可以避免硬编码上限。

答案 1 :(得分:1)

for file in $(find /path/to/your/files -type f -name "A?????");do python script.py -r "$file"; done

答案 2 :(得分:1)

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