트리 명령에서 이미지 시퀀스 출력을 줄이는 방법은 무엇입니까?

트리 명령에서 이미지 시퀀스 출력을 줄이는 방법은 무엇입니까?

tree나는 명령을 실행하면 다음과 같은 결과가 나오는 디렉터리에 있습니다 .

├── directory1
│   └── image_sequence
│       ├── image.0001.jpg
│       ├── image.0002.jpg
│       ├── image.0003.jpg
│       ├── image.0004.jpg
│       ├── image.0005.jpg
│       └── image.0006.jpg
│ 
└── directory2
    ├── somefile.ext
    └── someanotherfile.ext2

내부의 이미지 시퀀스는 image_sequence자르고 싶은 큰 목록을 생성합니다. 내가 원하는 출력은 다음과 같습니다.

├── directory1
│   └── image_sequence
│       └── image.####.jpg
│ 
└── directory2
    ├── somefile.ext
    └── someanotherfile.ext2

명령 의 출력을 tree어떻게든 수정할 수 있습니까?

답변1

이 시도:

tree | sed '/\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 image\.[0-9]\+\.jpg/d; s/\(\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 image\.\)[0-9]\+\(\.jpg\)/\1####\2/'
  • 첫 번째는 (의사 패턴) 항목을 /.../d;포함하는 모든 줄을 삭제합니다 .├── image.[0-9]+.jpg
  • 두 번째 줄이 s/.../\1####\2/마지막 줄을 대체합니다.└── image.[0-9]+.jpg

산출:

$ tree | sed  '/\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 image\.[0-9]\+\.jpg/d; s/\(\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ima
ge\.\)[0-9]\+\(\.jpg\)/\1####\2/'
.
├── directory1
│   └── image_sequence
│       └── image.####.jpg
└── directory2
    ├── someanotherfile.ext
    └── somefile.ext

3 directories, 8 files

물론 이는 모든 파일이 image_sequence이미지 패턴과 일치하는 경우에만 작동하며 패턴과 일치하는 다른 디렉터리의 파일 이름을 수정합니다. image_sequence예를 들어 의 마지막 파일이 이면 readme.txt대신 모든 이미지 항목이 제거됩니다.

답변2

표현식을 사용하여 순차 파일 이름의 숫자 부분을 #s로 바꿀 수 있습니다.sed프레디의 대답). uniq그런 다음 중복된 줄을 제거할 수 있습니다.

tree | sed 's/\.[0-9]\+\.jpg/.####.jpg/g' | uniq

(마지막 줄이 나무 그리기 부분에서 다른 기호를 사용하기 때문에) 이미지에 대해 두 개의 항목이 여전히 남지만 목록은 여전히 ​​관리 가능한 길이로 잘렸습니다.

.
|-- directory1
|   `-- image_sequence
|       |-- image.####.jpg
|       `-- image.####.jpg
`-- directory2
    |-- someanotherfile.ext2
    `-- somefile.ext

관련 정보