3

我为我的 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”,导致播客播放器无法识别此类文件。

是否可以在脚本中添加一行以删除扩展名前面的句点或将它们全部删除?

4

4 回答 4

3

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

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

如果你已经perl安装了但是找不到rename,也可以试试prename

于 2013-05-07T19:28:47.270 回答
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在这种情况下)。

于 2013-05-07T20:32:16.717 回答
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
于 2013-05-07T19:27:37.320 回答
0

刚刚在这里遇到了这个答案。
您可以rename通过使用以下命令安装该软件包来使用它。

sudo apt install rename

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

rename 's/\.(?!mp4$)/ /g' *.mp4
于 2018-07-25T18:37:15.487 回答