2

この形式でディレクトリを一覧表示する方法を知りたいです。通常のリスト構造:

#find . -follow -type f | sed "s/.//"

/files/test1/test2/file1.txt
/files/test1/test2/file2.txt
/files/test1/test2/file3.txt
/files/test1/file1.txt
/files/test1/file2.txt
/files/test1/file3.txt
/files/file1.txt
/files/file2.txt
/files/file3.txt
/file1.txt
/file2.txt
/file3.txt

以下のように列挙したいと思います。

/files/test1/test2/file1.txt
file2.txt
file3.txt
/files/test1/file1.txt
file2.txt
file3.txt
/files/file1.txt
file2.txt
file3.txt
/file1.txt
file2.txt
file3.txt

このような:

 ls -R1 | sed -e 's/://' -e 's/.//'

しかし、上で説明した構造が欲しいです!

4

2 に答える 2

3
... | while read path; do 
    dir=$(dirname "$path")
    if [[ $dir = $prev ]]; then 
        echo $(basename "$path")
    else 
        echo $path
        prev=$dir
    fi
done
于 2012-05-14T19:45:46.393 に答える
1

面白いクイズ!

サンプル ディレクトリとファイルのセットアップ

mkdir -p files/test1/test2 && for P in . files files/test1 files/test1/test2; do touch "$P"/file{1,2,3}.txt; done

ワンライナーとして、試してみてください

find . -type d | sort -r | while read P; do printf "${P#.*}"/; ls -v | while read F; do echo ${F##*/}; done; done

出力はあなたの要求のようなものです

/files/test1/test2/file1.txt
file2.txt
file3.txt

/files/test1/file1.txt
file2.txt
file3.txt

/files/file1.txt
file2.txt
file3.txt

/file1.txt
file2.txt
file3.txt

それを解決するのはとても楽しいです。

于 2012-05-15T09:15:17.120 に答える