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