트리 명령의 하위 디렉터리 모드 제외가 작동하지 않습니다.

트리 명령의 하위 디렉터리 모드 제외가 작동하지 않습니다.

tree 명령을 사용하여 현재 git 디렉토리를 나열하려고 합니다.

gitignore 패턴과 일치하는 모든 파일을 제외하고 싶습니다. 해결책을 찾았습니다여기유망해 보입니다.

불행하게도 tree 명령은 전체 경로 패턴을 올바르게 무시하지 못하는 것 같습니다.

예를 들어 다음은 간단한 디렉터리 구조입니다.

.
|-A
|-|-a.jpg
|-b.jpg

여기서는 다음과 같이 A와 해당 파일을 모두 제외할 수 있습니다.

tree -I 'A'

다음과 같이 a.jpg 또는 b.jpg를 제외할 수도 있습니다.

tree -I 'a.*|b.*'

하지만 다음과 같이 a.jpg를 제외할 수는 없습니다.

tree -I 'A/a.jpg'

그래서 전체 경로 패턴 매칭이 깨진 것 같습니다.

뭔가 빠졌나요? 아니면 트리와 일치하는 세분화된 하위 디렉터리 패턴을 갖는 것이 실제로 불가능합니까?

감사해요!

답변1

나는 같은 문제를 가지고있다. 사실, 나는 이것이 $ tree -I 'A/a.jpg'작동하지 않는다는 것을 깨달았습니다.

하지만 뜻이 있는 곳에 길이 있습니다.

$ tree
.
├── A
│   ├── a.jpg
│   └── b.jpg
└── a.jpg

$ tree --fromfile <<EOF
`tree -f -i -n -F --noreport | grep -v 'A/a.jpg' | grep -v -E '\.$' | sed "s/^\.//"`
EOF
.
├── A
│   └── b.jpg
└── a.jpg

추신: --fromfile옵션은 트리 1.8 이상에서만 사용할 수 있습니다.

답변2

이것이 작동할까요?

[user2@server-01 ~]$ tree myDir/
myDir/
├── A
│   └── a.jpg
├── B
│   └── a.jpg
└── b.jpg

2 directories, 3 files

모든 하위 디렉터리에 있는 동일한 이름을 가진 myDir의 모든 파일 목록을 얻으려면 가장 빠른 방법은 무엇입니까? grep -v?

제외할 파일의 전체 경로를 얻으려면 find 명령, 파이프 및 grep -v를 사용하십시오.

[user2@server-01 ~]$ find myDir/ | grep -v "myDir/A/a.jpg"
myDir/
myDir/A
myDir/b.jpg
myDir/B
myDir/B/a.jpg

또는 트리 방법을 사용하십시오. 그러나 전체 디렉토리 목록을 출력하려면 -f 플래그를 추가하십시오.

[user2@server-01 ~]$ tree -f myDir/ | grep -v "myDir/A/a.jpg"
myDir
├── myDir/A
├── myDir/B
│   └── myDir/B/a.jpg
└── myDir/b.jpg

grep -E는 파이프 문자로 구분된 여러 매개변수를 허용할 수 있습니다. -v 플래그와 함께 사용할 수도 있습니다.

[user2@server-01 ~]$ tree -f myDir/ | grep -vE "myDir/A/a.jpg | myDir/B/a.jpg"
myDir
├── myDir/A
├── myDir/B
└── myDir/b.jpg

2 directories, 3 files

관련 정보