Shell 使用文本文件中的数字重命名图像

Shell 使用文本文件中的数字重命名图像,shell,scripting,file-rename,Shell,Scripting,File Rename,我有一个包含图像和文本文件的文件夹。 图像名称的顺序如下:tramnummerx.JPG 文本文件的顺序如下:tramnummerx.txt 需要说明的是:x是一个变量 txt中有一个4位数字,例如6303。 在本例中,我想将.JPG文件重命名为:tramnummerx-6303.JPG 在我当前的脚本中,我做到了以下几点: x=O extention='*.txt' for i in 'ls $extention' do x = 'expr $x + 1' y= ??? the command

我有一个包含图像和文本文件的文件夹。 图像名称的顺序如下:tramnummerx.JPG 文本文件的顺序如下:tramnummerx.txt

需要说明的是:x是一个变量

txt中有一个4位数字,例如6303。 在本例中,我想将.JPG文件重命名为:tramnummerx-6303.JPG

在我当前的脚本中,我做到了以下几点:

x=O
extention='*.txt'
for i in 'ls $extention'
do
x = 'expr $x + 1'
y= ??? the command for extracting the number ???
mv tramnummerx.JPG tramnummerx-$y.JPG
done
我尝试了一些东西,比如awk'{print$NF-1,$NF;}'y=的文件名,但我最终以这种方式删除了我的文件

提前谢谢

解决方案:

for i in 'ls $extention'
do
x='expr $x +1'
read y < tramnummer$x.txt
mv tramnummer$x.JPG tramnummer$x-$y.JPG
done

使用正则表达式匹配从图像文件名中提取数字,使用read从相应的文本文件中提取新数字。如果我误解了你的问题,一些细节可能需要调整,但总体方法将保持不变

for img in *.JPG; do
    [[ $img =~ tramnummer([[:digit:]]+).JPG ]]
    x=${BASH_REMATCH[1]}
    read y < tramnummer$x.txt
    mv tramnummer$x.JPG tramnummer$x-$y.JPG
done
在现有代码中,可以使用以下行

x=$(( x + 1 ))
y=$(< tramnummer$x.txt )

但建议的解决方案更简洁、更惯用。

不要设置$extention,然后使用ls列出文件名,只需在*.txt中为i执行即可。如果文件名中有空格,这会更好地处理。