gpt4 book ai didi

bash - 递归循环特定的扩展名和子文件夹

转载 作者:行者123 更新时间:2023-12-04 22:46:13 26 4
gpt4 key购买 nike

我一直在尝试将 flac 转换为 m4a,我有以下脚本可以完成这项工作,但它不是递归的:

for f in *.flac; do
ffmpeg -i "$f" -vf "crop=((in_w/2)*2):((in_h/2)*2)" -c:a alac "${f%.flac}.m4a"
done

对于递归,我确实尝试了几种方法但都没有用,这是我尝试过的(文件名上的空格是这里的问题)

for f in `find . $PWD -iname *.flac`; do
ffmpeg -i "$f" -vf "crop=((in_w/2)*2):((in_h/2)*2)" -c:a alac "${f%.flac}.m4a"
done

还有这个

find . -type f -iname "*.flac" -print0 |
while IFS= read -r -d $'\0' line; do
echo "$line"
ffmpeg -i "$line" -vf "crop=((in_w/2)*2):((in_h/2)*2)" -c:a alac "${f%.flac}.m4a"; done
done

它们都不起作用。

最佳答案

第二次尝试由于单词拆分而失败:find 的输出被拆分了。

你最后一次尝试会成功,但是有一个done太多了,你在"${f%.flac}.m4a中使用了$f 它应该是 ${line%.flac}.m4a”

我会改用 glob(需要 shopt -s globstar):

for fname in **/*.flac; do
ffmpeg -i "$fname" -vf "crop=((in_w/2)*2):((in_h/2)*2)" \
-c:a alac "${fname%.flac}.m4a"
done

这将搜索当前目录的整个子树,而不需要 find


1 Bash 4.0 或更新版本

关于bash - 递归循环特定的扩展名和子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com