Bash递归:将目录树保存到文本文件

时间:2015-03-13 01:49:58

标签: bash shell recursion directory

我一直在努力学习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文件时,大约四分之一的艺术家子目录得到妥善保存..

0 个答案:

没有答案