linux - 删除文件名中最后一个字符的正则表达式不起作用

标签 linux bash rename

我最近使用 youtube-dl 下载了一堆视频,但是程序在文件名末尾附加了字符:例如,Video test 变成了 视频测试-jSbQ40_9B.mp3。格式始终相同:破折号和大约 10 个字母数字字符或下划线。为什么下面的命令什么都不做?

rename 's/[A-Za-z0-9]*\.mp3/\.mp3/' *

(我也试过以root身份运行它)

谢谢!

最佳答案

这应该有效:

rename 's/-\w+(\.mp3)$/$1/' *

否则:

rename 's/-\w+(?=\.mp3)$//' *

您的正则表达式与文件名中破折号后的下划线不匹配。 \w 匹配 [a-zA-Z0-9_]


或者不用重命名使用:

find . -name "*.mp3" -exec bash -c 'mv "$1" "$(sed "s/-[^.]*\(\.mp3\)$/\1/" <<< $1)"' - {} +

关于linux - 删除文件名中最后一个字符的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26844184/

相关文章:

linux - 在 Linux 中保留扩展名的同时重命名文件?

bash - 使用带有 'rename' 的通配符

xcode - 重命名 xcode 4 项目和实际文件夹

c++ - 在 Linux Mint 上使用 CMake 找不到 boost

linux - 在 Linux 中比较文本文件中两列的特定部分

linux - 如何通过shell脚本切换用户运行命令?

bash - cd 进入目录时触发命令

bash - 命令 `source` 在 Dockerfile 中不起作用

php - 将数据写入文件在行尾添加 ^M

regex - 提取包含bash中数字的路径的一部分