【问题标题】:Check for dots in the file name and remove them (on Linux)检查文件名中的点并删除它们(在 Linux 上)
【发布时间】:2013-05-01 20:58:14
【问题描述】:

我为我的 Synology NAS 找到了一个 bash 脚本,该脚本在文件夹中查找 *.mp4 文件,将视频剥离并保存为 *.m4a。 (目的是一个自动的“YouTube 到播客转换器”)。

for f in *.mp4; do mv -- "$f" "$(date +%Y-%m-%d -r "${f}") $f"; done
for f in *.mp4; do ffmpeg -i "$f" -vn -acodec copy "${f%.mp4}.m4a"; done

有时 *.mp4 文件名包含句点,例如'This video...mp4',导致播客播放器无法识别此类文件。

我可以在脚本中添加一行以删除扩展名前面的句点还是全部删除?

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    尝试以下操作,它使用 tr 删除文件名中的任何句点:

    for f in *.mp4; do mv -- "$f" "$(date +%Y-%m-%d -r "${f}") $f"; done
    for f in *.mp4; do ffmpeg -i "$f" -vn -acodec copy "`echo "$f" | tr -d "\."`.m4a"; done
    

    【讨论】:

    • convert.sh: line 2: tr: not found 看来我这个版本的linux对linux一点都不了解..
    • 缺少 tr 实用程序?那真不幸。这是精简嵌入式发行版的常见问题。
    • @user2359595:说真的,如果你没有tr,你的系统就会很笨拙,以至于你必须解决任何假设一组 POSIX 实用程序的已发布解决方案。
    • tr 否,但ffmpeg 是。真好:)
    【解决方案2】:

    使用rename 命令将多个连续的点替换为一个:

    rename 's/\.+/./g' *.mp4
    

    如果您安装了perl,但找不到rename,请尝试prename。

    【讨论】:

    • 感谢指针和命令行。不幸的是,我的 linux 版本似乎不支持 rename 命令(未找到)。干杯
    • 试试prerename,其中rename是别名。它在 Ubuntu 和 Debian 中与 perl 软件包一起安装。
    • 如果您有基于 Perl 的 rename 命令,这是一个很好的解决方案。不幸的是,有一些称为rename 的变体不使用Perl 正则表达式,这些变体......嗯,不如基于Perl 的同名命令令人满意。有关可用的 Perl rename,请参阅 How to rename with prefix/suffix。
    • perl -v 说什么?如果找不到,我在此处粘贴了一份副本:codepad.org/IWaCTnbY
    • @StefanoSanfilippo,${f} 不在任何引号之外:$() 在子外壳中运行,因此您有效地获得了新的引号“范围”。
    【解决方案3】:

    从${f} 中删除扩展名,然后删除或替换所有点,然后在重命名文件时添加扩展名,主要处理除最后一个点之外的所有文件:

    #!/bin/bash
    
    for f in *.mp4; do
            f=${f%.mp4}
            mv -- "${f}.mp4" "$(date +%Y-%m-%d -r "${f}.mp4") ${f//./_}.mp4"
    done
    for f in *.mp4; do
            ffmpeg -i "${f}" -vn -acodec copy "${f%.mp4}.m4a"
    done
    

    显然这只适用于单个扩展名(在这种情况下为.mp4)。

    【讨论】:

    • 先生,您真是个天才。 Dankeschön。
    • -- +1 的好用法 :)
    【解决方案4】:

    刚刚看到这个答案here。
    您可以使用以下命令安装rename 包。

    sudo apt install rename
    

    然后转到包含文件的目录并使用以下命令:

    rename 's/\.(?!mp4$)/ /g' *.mp4
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多