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用于findls结果。有other ways to do it

您可能想要使用-print0xargs来避免分词问题。

$ 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 
+1

最后一个例子假定没有文件名中包含换行符。即使有这个假设,使用'IFS = read -r fn'也是非常简单的。 – chepner

+0

@chepner:同意 – dawg