0

在我的目录中,我有子文件夹,我想像这样列出所有目录:

-  ./subfolder
-  ./subfolder/subsubfolder1
-  ./subfolder/subsubfolder2
-  ./subfolder/subsubfolder2/subsubsubfolder

我想列出这个结构:

./fol'der/subfol'der/

这是我的代码:

echo -n "" > myfile 
find . -type d -print0 | xargs -0 -I@ | cat | grep -v -P "^.$" | sed -e "s/'/\\\'/g" | xargs -I@ echo "-  @" >> myfile

所需的输出将是这样的:

-  ./fol'der
-  ./fol'der/subfol'der

但输出是:

-  ./fol'der
-  @

似乎在第二次出现单引号 ( ) 字符时sed失败了,或者其他什么。'我不知道。你能帮助我吗?(我在 OS X 10.7.4 上。)

4

3 回答 3

1

我一直像个白痴一样grep-ing和-ing。sed想了想,我想出了一个更简单的解决方案,一个 for 循环。

echo -n "" > myfile

for folder in $(find . -type d)
do
    if [[ $folder != "." ]]
    then
        echo "-  ${folder}" >> myfile
    fi
done


我之前的解决方案不适用于包含空格的名称,因此正确的是:

echo -n "" > myfile

find . -type d -print0 | while read -d $'\0' folder
do
    if [[ "${folder}" != "." ]]
    then
        echo "-  ${folder}" >> myfile
    fi
done
于 2012-06-28T18:03:20.620 回答
0

使用 GNU Parallel,您可以:

find . -type d -print0 | parallel -q -0 echo '-  '{}

如果您有任何名称中带有 \n 的目录,您的输出将被搞砸。如果您没有任何名称中带有 \n 的目录,您可以执行以下操作:

find . -type d -print | parallel -q echo '-  '{}

仅当您确实需要在“-”之后有两个空格时才需要 -q 。

您可以通过以下方式安装 GNU Parallel:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

观看 GNU Parallel 的介绍视频以了解更多信息:https ://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

于 2012-06-28T18:10:54.803 回答
0

这是在 Linux 上,但它应该在 OS X 上工作:

find . -type d -print0 | xargs -0 -I @ echo '- @'

无论最后一组引号是单引号还是双引号,它都对我有用。

输出:

- ./fol'der
- ./fol'der/subfol'der
于 2012-06-29T08:39:22.800 回答