
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