【问题标题】:Regexp to remove last characters in filenames doesn't work正则表达式删除文件名中的最后一个字符不起作用
【发布时间】:2015-01-06 18:42:26
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: linux bash rename


    【解决方案1】:

    这应该可行:

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

    否则:

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

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


    或不使用rename

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

    【讨论】:

    • 实际上它仍然无法正常工作......但我想知道问题是否来自这里:这些文件位于我每次都必须挂载的单独的 NTFS 分区上。会是这个原因吗?
    • 我把所有的文件都移到了我的/home/,但是这个命令仍然不起作用。并且文件和文件夹都有读写权限。
    • 示例文件名:“我有你-hV20RzTvwZE.mp3”。重命名命令什么都不做,没有文件被改变,也没有任何输出消息。如果我使用 -v,也不会标记要重命名的文件。
    • 当我运行 rename 时,该文件被重命名为 I've Got You.mp3
    • 它仍然不起作用...我将把它标记为“已回答”并手动执行。感谢您的帮助。
    猜你喜欢
    • 2013-04-28
    • 2019-03-21
    • 2015-10-25
    • 1970-01-01
    • 2020-08-24
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多