在工作中,我经常在测试电路时生成由示波器产生的一系列.png图像。我喜欢在以后用描述性标题标记图像,以跟踪哪个图像用于哪个测量。通常,我使用Cygwin批量重命名它们,然后手动返回以在其名称中添加数字,但是如果有很多来自不同测试的样本,这将非常繁琐。我正在尝试编写一个bash脚本,该脚本可以快速轻松地标记它们。
例如,如果我有文件
scope1.png, scope2.png, scope3.png, scope4.png
我如何编写一个bash脚本,将其标记为
circuit_1_sample_1.png, circuit_1_sample_2.png, circuit_2_sample_1.png, circuit_2_sample_2.png
我可能可以在python中很容易地做到这一点,但是有没有一种简单的方法可以使bash或Cygwin做到这一点?
谢谢。
答案 0 :(得分:0)
如果所有示波器都用于同一电路:
for f in scope*.png; do mv "$f" "circuit_1_sample_${f/scope/}"; done
如果仅示波器9-12适用于同一电路:
for f in scope{9..12}.png; do ...
如果从字面上看完全像您的问题,那么每个电路有两个示波器:
for f in scope*.png; do
num=${f//[^0-9]/}
mv "$f" "circuit_$(( num / 2 ))_sample_$(( num % 2)).png"
done
Globing或*
的工作方式与您期望的一样,它将在当前目录中找到所有可能与该模式匹配的文件,其中*
为多字符通配符。 $(( ))
只是bash算术运算,其工作方式与您期望的一样(仅整数)。 ${f/...}
是bash parameter expansion。它太酷了;您应该阅读一下。