Bash - LAME编码器无法读取文件路径
问题描述:
如何正确地将find
中的路径转换为新的命令参数?Bash - LAME编码器无法读取文件路径
#!/bin/bash
for f in $(find . -type f -name '*.flac')
do
if flac -cd "$f" | lame -bh 320 - "${f%.*}".mp3; then
rm -f "$f"
echo "removed $f"
fi
done
返回
lame: excess arg Island of the Gods - 3.mp3
答
使用击for
环是not ideal用于find
或ls
结果。有other ways to do it。
您可能想要使用-print0
和xargs
来避免分词问题。
$ find [path] -type f -name *.flac -print0 | xargs -0 [command line {xargs puts in fn}]
或使用查找-exec
小学:
$ find [path] -type f -name *.flac -exec [process {find puts in fn}] \;
替代,你可以使用一个while
循环:
find [path] -type f -name *.flac | while IFS= read -r fn; do # fn not quoted here...
echo "$fn" # QUOTE fn here!
# body of your loop
done
最后一个例子假定没有文件名中包含换行符。即使有这个假设,使用'IFS = read -r fn'也是非常简单的。 – chepner
@chepner:同意 – dawg