2

给定 Ubuntu 16.04 服务器上混合文件的几个子目录,我想获取所有名为 like1.al2.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

我知道为什么会发生这种情况,而且我觉得答案在于大括号扩展。我找到了剥离和添加后缀的方法,但前缀答案让我望而却步。谢谢。

4

1 回答 1

1

这里没什么可做的,但我认为您想使用该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就个人而言,我发现使用flag to更容易一些find。需要担心的间接级别少了一层。{}表示文件名,命令以 a 终止;(转义,因此 shell 不会抓取它。)

find . -name '[[:digit:]]*.al' -exec sh -c 'sox -c1 --rate 8k "{}" -e a-law "$(dirname "{}")/quick_$(basename "{}")" tempo -q -s 1.5' \;
于 2017-03-22T03:28:37.910 回答