gpt4 book ai didi

bash - 如何遍历子目录中的文件?

转载 作者:行者123 更新时间:2023-12-02 16:14:36 24 4
gpt4 key购买 nike

我正在尝试将目录中单独子目录中的一堆 .aac 文件转换为 .mp3 文件。这是我写的代码:

for dir in */
do
OUTPUT_DIR=./mp3
mkdir "$OUTPUT_DIR"
for i in *.aac;
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" -vn -ar 44100 -ac 2 -b:a 192k "$OUTPUT_DIR/${name}.mp3"
done
done

然而,这只是尝试在外部目录中运行命令并给出错误。我是 bash 的新手,所以这可能是一个我没有发现的非常简单的错误。

最佳答案

How to loop through files in subdirectories?

阅读前How to loop through a directory recursively to delete files with certain extensions

This is the code I've written:

使用 http://shellcheck.net 检查您的脚本

不要使用`。使用 $(...)相反。

要获取文件名和目录,请参阅 basenamedirname命令。你的name=<code>echo "$i" | cut -d'.' -f1</code>当目录有一个点时将失败。

使用 printf "%s\n" "$i"或者在 bash 中 <<<"$i"这里是字符串 echo "$i" | .见前。 https://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo .

在脚本中首选小写变量。

so it might be a very simple mistake I'm not seeing.

您根本没有更改目录。你需要cd到那个目录的某个地方然后cd -返回(或 pushd + popd )。但无论如何都只是引用相对于当前目录的目录。也许有一些东西:

for dir in ./*/; do
# create the directory in dir
output_dir="./$dir/mp3"
mkdir "$output_dir"
# find files aac inside $dir/
for i in "$dir"/*.aac; do
name=$(basename "$i" .acc)
echo "$name"
ffmpeg -i "$i" -vn -ar 44100 -ac 2 -b:a 192k "$output_dir/${name}.mp3"
done
done

关于bash - 如何遍历子目录中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67093030/

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