我一直在努力学习bash,而且我还有一个包含艺术家姓名和专辑的大型音乐文件夹,我想将其备份到文本文件中。例如:
Arist1
Album1
Side A
Side B
Album2
Artist2
Album1
到目前为止,我所使用的脚本适用于小目录,如下所示:
treesave (){ path="$1" indent=$2
cd "$path"
for i in *
do
if [ -d ${i} ]; then
printf "%${indent}s%s\n" " " "${i}"
(treesave "${i}" $(( $indent + 4 )))
fi
done
}
要保存到文本文件,我这样做
(treesave path indent) >> outfile.txt
。
然而,当我在我的大型音乐上运行时,我得到了一个类似的大型错误列表:
-bash: [: too many arguments
-bash: [: Item: binary operator expected
就像我说的,这适用于小目录,所以我想知道:我的音乐库是否太大而无法重复?它有不到一千名艺术家。如果必须的话,我可以用python鞭打它,但这比任何事情都更像是一种bash练习。
另外,有人可以解释一下/ reason_why将命令括在括号中是至关重要的,以及为什么它会在函数运行完成后让我的shell cwd不能改变?
提前致谢。
编辑:当我将该功能重定向到txt文件时,大约四分之一的艺术家子目录得到妥善保存..