bash,文件,重命名文件,切换位置

gen*_*bee 2 bash files rename

如何重命名

sluno-20201027-call-metroua-status.mp4
sluno-20201103-call-deriva.mp4
sluno-20201103-call-metroua-status.mp4
sluno-20201105-call-makrocz.mp4
sluno-20201105-call-metroua-testcall.mp4
sluno-20201105-call-sluno-ggtabak.mp4
sluno-20201110-call-makrocz.mp4
sluno-20201110-call-metroua-status.mp4
sluno-20201110-call-sluno-utccz.mp4
Run Code Online (Sandbox Code Playgroud)

sluno-call-metroua-status-20201027.mp4
sluno-call-deriva-20201103.mp4
sluno-call-metroua-status-20201103.mp4
sluno-call-makrocz-20201105.mp4
...
Run Code Online (Sandbox Code Playgroud)

只需将位置7-14上的日期/字符串移动到文件名的末尾。

谢谢。

bac*_*c0n 7

mmv 适用于简单的文件重命名

mmv '*-*-*-*.mp4' '#1-#3-#4-#2.mp4'
Run Code Online (Sandbox Code Playgroud)

拥有更多参考点也可能会有所帮助,以确保不会更改其他内容的名称,尤其是在同一目录中可能存在其他文件的情况下。

mmv 'sluno-[0-9]*-call-[a-z]*.mp4' 'sluno-call-#3#4-#1#2.mp4'
             ^  ^        ^  ^
             1  2        3  4

sluno-20201027-call-metroua-status.mp4
      ^-------      ^-------------
      1   2         3       4

Run Code Online (Sandbox Code Playgroud)

如果我有最低限度做到这一点,mv而且bash我会用一个for循环,进入bash内置BRE匹配。

for i in *.mp4; do \
    [[ $i =~ ^sluno-(.*)-call-(.*).mp4 ]] && \
    mv -- "$i" "sluno-call-${BASH_REMATCH[2]}-${BASH_REMATCH[1]}.mp4"; \
done
Run Code Online (Sandbox Code Playgroud)

  • 这很整洁!直到现在我才听说过 `mmv` 命令 (3认同)