我无法在bash中操纵字符串。我希望重新编写扩展名。
我在下载目录中有以下2个文件
使用下面的脚本,我总是得到相同的文件名,而不会将.mkv重写为.mp4。
find /Downloads -name \*.mkv -execdir echo $(file={}; echo ${file/mkv/mp4};) \;
我知道这不是重新格式化文件所需的全部内容,但此脚本是传递给FFMPEG的较大脚本的一部分。
以下是FFMPEG的完整命令。
find /Downloads -name \*.mkv -execdir ffmpeg -i {} -vcodec copy -acodec copy $(file={}; echo ${file/mkv/mp4};) \;
答案 0 :(得分:0)
您可以尝试使用bash -c执行命令
find /Downloads -name \*.mkv -execdir bash -c 'file={}; echo ${file/.mkv/.mp4}' \;
答案 1 :(得分:0)
exec和execdir通常用于实际执行命令,不回显/打印有关找到的文件的信息(print / printf)。
有几种方法可以做到这一点,这是一个。
您可以先尝试使用可以使用正则表达式替换重命名文件的rename命令。这将要求将所有文件重命名为相同的文件夹/下载:(语法可能非常根据您的发行版附带的重命名实现)
ls *.mkv
a.mkv b.mkv
rename .mkv .mp4 *.mkv
ls *.mp4
a.mp4
b.mp4
我们假设mkv文件也存在于/ Downloads的子目录中:
find . -type f -name "*.mkv"
./sundir/d.mkv
./sundir/c.mkv
./a.mkv
./b.mkv
find -type f -name "*.mkv" -exec rename .mkv .mp4 {} \;
find . -type f -name "*.mp4"
./sundir/c.mp4
./sundir/d.mp4
./b.mp4
./a.mp4