내가 있는 디렉터리에서 명령을 실행하면 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
다음과 같은 표현식을 #
사용할 수 있습니다 .sed
프레디의 대답). uniq
그런 다음 중복 행을 제거할 수 있습니다.
tree | sed 's/\.[0-9]\+\.jpg/.####.jpg/g' | uniq
(마지막 줄이 트리 그리기 부분에서 다른 기호를 사용하기 때문에) 이미지에 대한 두 개의 항목이 여전히 남지만, 목록은 여전히 관리 가능한 길이로 잘립니다.
.
|-- directory1
| `-- image_sequence
| |-- image.####.jpg
| `-- image.####.jpg
`-- directory2
|-- someanotherfile.ext2
`-- somefile.ext