检查文件名中的点并将其删除(在Linux上)

时间:2013-05-07 19:24:59

标签: linux bash

我发现我的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文件名包含句点,例如'此视频... mp4',导致播客播放器无法识别此类文件。

我可以添加一行代码来删除扩展程序前面的句点,还是只删除所有句点?

4 个答案:

答案 0 :(得分:2)

使用rename命令只用一个替换多个连续点:

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

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

答案 1 :(得分:2)

${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)。

答案 2 :(得分: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

答案 3 :(得分:0)

只是碰到了这个答案here
您可以使用以下命令安装rename软件包。

sudo apt install rename

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

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