【问题标题】:How to rename all files in a directory in linux with string substitution?如何使用字符串替换重命名linux目录中的所有文件?
【发布时间】:2016-07-30 10:13:39
【问题描述】:

我想重命名我的 linux 系统目录中的多个文件....

我的文件名如下:

Lec 1 - xxx.webm
Lec 2 - xxx.webm
Lec 3 - xxx.webm
Lec 4 - xxx.webm

名单还在继续……

这里的 xxx 可以是任何字符列表(不一致)....

我想重命名这里的每个文件,例如:

mv Lec 1 - xxx.webm Lec 1.webm
mv Lec 2 - xxx.webm Lec 2.webm
mv Lec 3 - xxx.webm Lec 3.webm

等等……

for in 循环可以做,但如何进行替换?

*去掉数字后的所有字符应该是我重命名的文件

【问题讨论】:

    标签: linux bash slackware


    【解决方案1】:

    这个 for 循环应该可以完成这项工作:

    for f in *.webm; do
       mv "$f" "${f/ -*/}.webm"
    done
    

    【讨论】:

    • 文件名改为Lec n - webm.webm
    • ${f/ -*/} 将删除原始字符串中 " -" 之后的所有内容,然后将 .webm 添加回来。
    • 现在我所有的文件都被重命名为Lec n.webm.webm,你能帮我把它重命名回Lec n.webm吗?我试过这个链接,但我收到错误unix.stackexchange.com/questions/102647/…
    • 是的,你可以使用这个循环:for f in *.webm.webm; do echo mv "$f" "${f%.webm}"; done 来修复这些文件名
    • 但是我没有给你任何find 命令开始。此外"${file/.webm/ }" 是错误的。如果你想使用 find 然后使用:find . -name '*.webm.webm' -exec bash -c 'mv "$1" "${1%.webm}"' - {} \;
    【解决方案2】:

    ${string%substring}:从$string 后面删除$substring 的最短匹配。

    for i in *.webm; do mv $i ${i%xxx}; done
    

    或查看:

    ${string%%substring}:从$string 的后面删除$substring 的最长匹配项。

    【讨论】:

      【解决方案3】:

      如果您安装了util-linux-ng

      find . -name "Lec*.webm" | xargs rename s/ -*//
      

      或:

      for file in $(find . -name "Lec*.webm")
      do 
        echo mv "$file" "`echo $file | sed s/ -*$//`"
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-04
        • 2019-08-25
        • 2018-06-25
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        • 2014-06-05
        相关资源
        最近更新 更多