在 sox 处理后使用大括号扩展为 bash 中的输出文件添加前缀
Prefixing an output file in bash with brace expansion after sox processing
给定 Ubuntu 16.04 服务器上混合文件的几个子目录,我想获取所有名为 1.al
、2.al
等的子目录,处理它们,保留原始文件, 并在生成的文件前加上 quick_
。所以我有这个...
find . -name '[[:digit:]]*.al' -print0 | xargs -0 -I {} sh -c 'for f; do sox -c1 --rate 8k "$f" -e a-law "quick_${f}" tempo -q -s 1.5; done' sh {}
但是我明白了
can't open output file `quick_./1.al': No such file or directory
我明白为什么会这样,我觉得答案在于大括号展开。我找到了去除和添加后缀的方法,但前缀答案让我望而却步。谢谢。
这里没有太多内容可以继续,但我认为您想使用 basename
命令来获取文件名:
find . -name '[[:digit:]]*.al' -print0 | xargs -0 -I {} sh -c 'for f; do sox -c1 --rate 8k "$f" -e a-law "$(dirname "$f")/quick_$(basename "$f")" tempo -q -s 1.5; done' sh {}
就我个人而言,我发现使用 -exec
标记到 find
会更容易一些。这是一个少一级的间接担心。 {}
代表文件名,命令以 ;
终止(转义所以 shell 不会抓住它。)
find . -name '[[:digit:]]*.al' -exec sh -c 'sox -c1 --rate 8k "{}" -e a-law "$(dirname "{}")/quick_$(basename "{}")" tempo -q -s 1.5' \;
给定 Ubuntu 16.04 服务器上混合文件的几个子目录,我想获取所有名为 1.al
、2.al
等的子目录,处理它们,保留原始文件, 并在生成的文件前加上 quick_
。所以我有这个...
find . -name '[[:digit:]]*.al' -print0 | xargs -0 -I {} sh -c 'for f; do sox -c1 --rate 8k "$f" -e a-law "quick_${f}" tempo -q -s 1.5; done' sh {}
但是我明白了
can't open output file `quick_./1.al': No such file or directory
我明白为什么会这样,我觉得答案在于大括号展开。我找到了去除和添加后缀的方法,但前缀答案让我望而却步。谢谢。
这里没有太多内容可以继续,但我认为您想使用 basename
命令来获取文件名:
find . -name '[[:digit:]]*.al' -print0 | xargs -0 -I {} sh -c 'for f; do sox -c1 --rate 8k "$f" -e a-law "$(dirname "$f")/quick_$(basename "$f")" tempo -q -s 1.5; done' sh {}
就我个人而言,我发现使用 -exec
标记到 find
会更容易一些。这是一个少一级的间接担心。 {}
代表文件名,命令以 ;
终止(转义所以 shell 不会抓住它。)
find . -name '[[:digit:]]*.al' -exec sh -c 'sox -c1 --rate 8k "{}" -e a-law "$(dirname "{}")/quick_$(basename "{}")" tempo -q -s 1.5' \;