如何在bash / Cygwin中用递增数字标记文件?

时间:2018-07-11 22:03:33

标签: bash cygwin counter file-rename

在工作中,我经常在测试电路时生成由示波器产生的一系列.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做到这一点?

谢谢。

1 个答案:

答案 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。它太酷了;您应该阅读一下。