파일 목록에서 "트리" 출력 만들기

파일 목록에서 "트리" 출력 만들기

다음 형식의 디렉토리 및 파일 이름 목록이 많이 있습니다.

drwxr-sr-x hamiltont/hamiltont 0 2015-03-11 23:54 Archive/Directory One/Subdir/
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory One/Subdir/file2.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory One/Subdir/file3.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory One/Subdir Two/somefile.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory Two/Subdir Something/somefile.txt
-rw-r--r-- hamiltont/hamiltont 21799 2014-01-10 12:52 Archive/Directory Other/Subdir/somefile.txt

표준 출력을 만들고 싶습니다 tree. 특히 디렉터리만 표시되며 최대 레벨 3까지만 표시됩니다 tree -L 3 -d. 예를 들면 다음과 같습니다.

├── Directory\ One
│   ├── Subdir
├── Directory\ Two
│   ├── Subdir
│   ├── Subdir\ Something
│   └── Subdir\ Two
├── Directory\ Other
│   └── Subdir

상당히 복잡한 bash 스크립트를 사용하여 이 작업을 수행할 수 있지만 더 쉬운 방법이 있을 것으로 생각됩니다.

답변1

당시에는 사용할 수 없지만 Version 1.8.02018년 11월 16일 현재 다음 옵션 tree이 있습니다 --fromfile."파일 시스템이 아닌 파일에서 디렉터리 목록을 읽습니다."
따라서 예의 형식을 올바르게 지정하면 infile다음과 같습니다 .

Archive/Directory One/Subdir/
Archive/Directory One/Subdir/file2.txt
Archive/Directory One/Subdir/file3.txt
Archive/Directory One/Subdir Two/somefile.txt
Archive/Directory Two/Subdir Something/somefile.txt
Archive/Directory Other/Subdir/somefile.txt

그럼 당신은 실행할 수 있습니다

tree --fromfile infile
infile
└── Archive
    ├── Directory One
    │   ├── Subdir
    │   │   ├── file2.txt
    │   │   └── file3.txt
    │   └── Subdir Two
    │       └── somefile.txt
    ├── Directory Other
    │   └── Subdir
    │       └── somefile.txt
    └── Directory Two
        └── Subdir Something
            └── somefile.txt

8 directories, 5 files

디렉토리만 표시하고 레벨 3까지만 표시합니다.

tree -L 3 -d --fromfile 파일 입력
infile
└── Archive
    ├── Directory One
    │   ├── Subdir
    │   └── Subdir Two
    ├── Directory Other
    │   └── Subdir
    └── Directory Two
        └── Subdir Something

8 directories

답변2

이것은 내 대답이지만 아마도 개선될 수 있습니다.

# Find all lines with directories
# Remove all ls output before the path is listed
# Recreate the directory tree
grep '^d' archive_filelist.txt | sed 's|.*Archive\(.*\)|\"Archive\1\"|' | xargs mkdir -p
# Use tree as you would normally
tree -L 2 -d Archive

디렉토리 목록은 거대한 아카이브(200GB 이상)이므로 이 접근 방식은 시간이 좀 걸립니다.

관련 정보