我有一个名为Original
的目录,其中包含各种文件夹中包含的flac文件(所有扩展名为* flac)艺术家),例如Original/ABBA/Arrival/02 Dancing Queen.flac
。
使用Bash,我想对这些文件运行flac -d
命令,输出设置为新的父目录(Raw
),但具有相同的子目录& filename作为输入文件,例如完整的命令是:
flac -d 'Original/ABBA/Arrival/02 Dancing Queen.flac' -o 'Raw/ABBA/Arrival/02 Dancing Queen.wav'
但我希望这个命令可以在' Original'中的每个flac文件上运行。目录 - 递归。
我该怎么做?
答案 0 :(得分:2)
您可以使用find
递归列出文件。使用其-name
过滤器仅获取flac
个文件。
使用exec
为找到的每个文件运行命令。 {}
扩展了文件路径,您可以使用bash的Prameter Expansion从开头删除Original
,并从每个文件路径的末尾删除flac
。
find Original -name '*.flac' -exec bash -c \
'o="{}" ; r=Raw${o#Original} ; r=${r%flac}wav ; flac -d "$o" -o "$r"' \;
由于文件路径可以包含空格,不要忘记双引号变量。
如果你的路径包含双引号,那你就注定了。
答案 1 :(得分:-2)
简单
shopt -s globstar
ls ** | grep flac$
你可以把它放在for循环中,做你想做的事情