我有一个conv.sh
脚本可以循环当前目录中的 MP3 文件并将它们转换为 OGG。我还有几个目录 {F1, F2,..., F20} 位于/path/to/Files/
.我应该如何conv.sh
在所有这些目录上执行?
答案1
尝试这个
curdir=$(pwd)
for folder in /path/to/Files/*; do
[ -d "$folder" ] && cd "$folder" && ./conv.sh
done
cd $curdir
或者假设你在/path/to/Files/
,这也有效
for f in *; do [ -d "$f" ] && cd "$f" && ./conv.sh; done; cd ..
您可以使用F{1..20}
代替来*
获得更高的精度。
答案2
答案3
您可以使用 xargs 或 GNU 并行:
echo /path/to/Files/F{1..20} | tr ' ' '\n' |
xargs -L conv.sh
或者:
echo /path/to/Files/F{1..20} | tr ' ' '\n' |
parallel conv.sh
编辑 - 明智地处理空间
正如 Ole 所指出的,上述方法都不能正确处理空间,即dir name
会被视为两个单独的参数,如果目录名称包含换行符,则会出现相同的问题。
处理这些问题的最佳方法是使用 null 作为分隔符,例如使用 GNU find:
find /path/to/Files -mindepth 1 -maxdepth 1 -type d -regex '.*/F[0-9]*' -print0 |
parallel -0 conv.sh