트리 전용 출력 파일을 만들려면 어떻게 해야 합니까?

트리 전용 출력 파일을 만들려면 어떻게 해야 합니까?

tree하나 있다-d옵션은 " List directories only." 입니다.. 그러나 "파일만 나열" 옵션을 찾을 수 없는 것 같습니다. 매뉴얼 페이지를 살펴봤지만 파일 목록만 나열하는 옵션을 찾을 수 없는 것 같습니다.

답변1

다른 사람들이 의견에서 말했듯이 디렉토리가 아닌 목록을 나열하는 것만으로는 명령의 목적에 정확히 부합하지 않습니다 tree.

그러나 파일만 나열됩니다.현재 디렉터리에당신이 나와 같고 사용자 정의를 사용하는 것을 선호한다면 tree( ls아마도 당신이 선호하는 플래그와 매개변수 별칭을 ls사용할 수도 tree있습니다), 이것은 드문 일이 아닙니다.

tree와 의 조합을 사용하면 grep원하는 것을 얻을 수 있습니다.

$ tree -F
.
├── file1.txt
├── file5.txt
├── parent_dir1/
│   ├── child_dir/
│   ├── file2.txt
│   └── file3.txt
└── parent_dir2/
    └── child_dir2/
        └── file4.txt

4 directories, 4 files
$ tree -FL 1 | grep -v /$
.
├── file1.txt
├── file5.txt

2 directories, 1 file

"F" 플래그를 사용하면 tree"/"가 디렉터리에 추가되는 반면 "v" 플래그는 grep"/"로 끝나는 모든 줄과 일치하는 지정된 패턴을 반전시킵니다.

목차가 실제로 표시되지는 않지만 끝에 있는 요약도 여전히 적용된다는 것을 알 수 있습니다.

한 레벨 이상 아래로 내려가면 트리 구조가 이어지며 상황이 조금 이상해집니다.

$ tree -FL 3 | grep -v /$
.
├── file1.txt
├── file5.txt
│   ├── file2.txt
│   └── file3.txt
        └── file4.txt

4 directories, 4 files

편집하다

또한 이 손상된 트리 출력이 문제가 되는 경우(예: 일부 파일이 "└─" 문자 대신 "├─" 문자로 시작하고 다중 레벨 버전이 사라지는 것처럼 보이는 경우...) 먼저 이 문제를 해결할 수 있습니다. 출력 디렉토리를 정렬합니다.

$ tree --dirsfirst -FL 1 | grep -v /$
.
├── file1.txt
└── file5.txt

2 directories, 1 file
$ tree --dirsfirst -FL 3 | grep -v /$
.
│   ├── file2.txt
│   └── file3.txt
│       └── file4.txt
├── file1.txt
└── file5.txt
4 directories, 5 files

나는 이것이 실제로 노드 없는 트리 구조를 더 읽기 쉽게 만든다고 생각합니다.

답변2

다음 명령을 고려하십시오.

tree -ifF /usr/java/default/jre/lib/images | grep -v '/$'

/usr/java/default/jre/lib/images
/usr/java/default/jre/lib/images/cursors/cursors.properties
/usr/java/default/jre/lib/images/cursors/invalid32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_CopyDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_CopyNoDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_LinkDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_LinkNoDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_MoveDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_MoveNoDrop32x32.gif
/usr/java/default/jre/lib/images/icons/sun-java_HighContrastInverse.png
/usr/java/default/jre/lib/images/icons/sun-java_HighContrast.png
/usr/java/default/jre/lib/images/icons/sun-java_LowContrast.png
/usr/java/default/jre/lib/images/icons/sun-java.png

2 directories, 12 files

-i및 인수를 사용하면 들여쓰기 대신 전체 경로가 각 줄에 출력됩니다 -f. tree이 매개변수는 디렉토리 이름에 -F를 추가하게 하며 , 이는 반전된 grep()에 의해 필터링됩니다./grep -v '/$'

나는 다른 명령을 실행하는 동안 출력 디렉터리(및 해당 하위 디렉터리)의 내용을 조급하게 관찰하는 데 도움이 되도록 이러한 변형을 자주 사용합니다.

watch exec "tree -ifFsD /var/local/myapp/data | grep -v '/$'"

답변3

사용하지 않는다는 답변에 동의하신다면 tree사용을 권해 드립니다 find.

find $DIR -type f

$DIR검색하려는 디렉토리는 어디에 있습니까?

그럼 넌 할 수 있어트리 형태로 아름답게 꾸며보세요당신이 할 의향이 있다면.

이 모든 작업을 수행하는 함수를 만들 수 있습니다 tree_file. 크레딧은 JavaSherrif로 이동합니다.이 답변(이전에 링크된) sed것들. 방금 UTF 문자를 포함하도록 조정했습니다.

tree_file() {
    DIR=${1:-"."}

    find $DIR -type f |  sed -e "s/[^-][^\/]*\//  │/g" -e "s/│\([^ ]\)/│── \1/" 
}

답변4

이전 스레드이지만 -F now(?)는 파일 형식을 표시하기 위해 다른 문자를 추가합니다.

-F는 ls -F에 따라 /' for directories, a소켓 파일의 경우 =', 게이트(Solaris)의 경우 >' 및 FIFO의 경우 "|"를 추가합니다.*' for executable files, a

명령은 다음과 같습니다.

watch exec "tree -ifFsD /var/local/myapp/data | grep '[[:alnum:]]$\|\*'"

관련 정보