【问题标题】:Rename multiple files with sed使用 sed 重命名多个文件
【发布时间】:2013-06-12 19:39:54
【问题描述】:

如何将标题为 Stargate SG-1 Season 01 Episode 01 的文件重命名为“s01e01”?当然是可变编号。 我已经有这样的东西了:

for file in *.mkv; do mv "$file" "$(echo "$file" | sed -e "REGEX HERE")

我只需要执行我需要的 sed 命令。

谢谢

【问题讨论】:

标签: linux sed rename


【解决方案1】:

不需要 sed,试试这个:

#!/bin/bash

for f in *.mkv;
do
    set -- $f
    mv "$f" s${4}e${6}
done

在行动:

$ ls
Stargate SG-1 Season 01 Episode 01.mkv

$ ./l.sh 

$ ls
s01e01.mkv

【讨论】:

  • 他要求sed。你怎么知道他不需要sed?这个例子可能只是一个案例,他可能还有很多其他人需要sed。另外,您的答案取决于bash,他可能正在使用另一个shell。
  • 好吧,OP 接受了答案,所以我想它解决了问题。如果您认为自己有更好的解决方案,请将其发布并看看会发生什么:-)
  • 作为 OP 并不能使他成为真相的最终仲裁者,被接受的答案并不意味着它是好的,事实上这并不意味着它甚至是一个答案。跨度>
【解决方案2】:

awk 对此也有好处

for file in *.mkv; do
   mv "$file" $(awk '{print "s", $4, "e", $6}' <<<$file).mkv
done

我认为这对 sed 来说不是问题 :)

【讨论】:

    【解决方案3】:

    GNU sed

    for file in *.mkv; do mv "$file" "$(echo "$file" | sed -e 's/.*\(\S\+\)\s\+\S\+\s\(\S\+\)$/s\1e\2/')
    

    【讨论】:

      【解决方案4】:

      我会这样重命名所有 *.mkv 文件:

      ls *.mkv | awk '{print "mv \"" $0 "\" s" $4 "e" $6}' | sh

      ls *.mkv | awk '{print "\"" $0 "\" s" $4 "e" $6}' | xargs mv

      【讨论】:

        猜你喜欢
        • 2014-06-08
        • 2011-01-23
        • 2011-08-06
        • 2021-06-04
        • 2019-01-09
        • 2021-06-11
        • 2014-02-17
        • 2021-05-26
        • 1970-01-01
        相关资源
        最近更新 更多