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の2番目の出現で失敗するようです。'何も思いつきません。手伝って頂けますか?(私は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

これは Linux 上のものですが、OS X でも動作するはずです:

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

最後の引用符のセットが一重か二重かに関係なく、私にとってはうまくいきます。

出力:

- ./fol'der
- ./fol'der/subfol'der
于 2012-06-29T08:39:22.800 に答える
0

GNU Parallel を使用すると、次のことができます。

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

名前に \n が含まれるディレクトリがあると、出力が台無しになります。名前に \n を含むディレクトリがない場合は、次のことができます。

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

-q は、'-' の後に 2 つのスペースが本当に必要な場合にのみ必要です。

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 に答える