我有很多这样的文件(图像)(文件名只由数字组成):
123456.jpg
369258.jpg
987123.jpg
...
我需要在其他文件夹中复制每个文件夹(让我们将其命名为 output )并根据其名称中的数字重命名每个文件,如下所示(在伪代码中):< / p>
outputFileName = String(filename[0]) + String(filename[1]) + String(filename[2]+filename[3]) + ".jpg"
正如您所看到的,重命名涉及在文件名中获取某个符号,有时会在文件名中获得一些符号的总和。
我需要制作一个脚本,在我根据类似算法放置脚本的文件夹中批量重命名所有* .jpg,并在前面提到的 output 文件夹中输出重命名的文件。
这个脚本应该可以从macos终端和windows通过cygwin shell工作。
答案 0 :(得分:4)
我假设主要问题是:如何获取bash变量的特定字符以及如何在bash中执行添加。
要从bash变量中获取char,您可以使用以下格式:${var:START_INDEX:LENGTH}
。
执行添加:$((ARG1 + ARG2))
您生成的脚本可能是这样的:
#!/bin/bash
for f in *.jpg
do
output=${f:0:1}${f:1:1}$((${f:2:1} + ${f:3:1})).jpg
mv -- "$f" "$output"
done
答案 1 :(得分:3)
您正在寻找substring extraction。
语法为${string:position:length}
,其中string是变量的名称,position是起始位置(0是第一个索引),length是子字符串的长度。
将创建问题中指定的文件名的脚本,并将名为“input”的文件夹复制到名为“output”的文件夹中的脚本可能如下所示:
#!/bin/bash
for file in input/*.jpg
do
filename="$(basename "$file")"
firstChar="${filename:0:1}"
secondChar="${filename:1:1}"
thirdAndFourthChar="$(( ${filename:2:1} + ${filename:3:1} ))"
newfilename="$firstChar$secondChar$thirdAndFourthChar.jpg"
cp "$file" "output/$newfilename"
done