적어도 하나의 "wav" 파일이 포함된 디렉터리를 사용 find
하고 복사 하고 싶습니다 . rsync
"wav" 파일이 있는 경우 복사본은 전체 폴더를 복사해야 합니다. 지금까지 나는 이것을 가지고 있습니다 :
find . -name "*.wav" | rsync -armR --include="*/" --include="*.wav" --exclude="*" /users/lukew/desktop/merged /users/lukew/desktop/123;
출력은 단일 "wav" 파일로 출력 수준의 올바른 디렉터리에 배포되기 때문에 괜찮습니다. 또한 소스 디렉터리의 다른 파일이 출력 디렉터리의 "wav" 파일과 함께 포함되기를 원합니다.
답변1
어떤 디렉터리에 파일이 포함되어 있는지 파악해야 합니다 .wav
.
find . -type d \
-exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' \
-print
이것은 모든 디렉토리를 반복하고 모든 디렉토리에서 .
glob 패턴을 시도합니다. *.wav
패턴이 확장되지 않으면 거기에 파일이 없다고 가정합니다( .wav
디렉터리에 리터럴 이름을 가진 파일이 존재하고 동일한 디렉토리에 다른 파일이 없으면 이는 실패합니다).*.wav
.wav
rsync
그런 다음 위 명령을 병합하여 이러한 디렉터리를 동기화할 수 있습니다 .
find . -type d \
-exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' \
-exec rsync -a {} /path/to/destination/ ';'
/path/to/destination
그러면 파일이 포함된 것으로 밝혀진 각 디렉토리에 대한 하위 디렉토리가 생성됩니다 .wav
.
시험:
$ tree Source
Source
|-- A
| |-- a.wav
| |-- hs.doc
| `-- hy.xls
|-- B
| |-- hs.doc
| `-- py.xls
`-- C
|-- CA
| |-- d.wav
| |-- h.doc
| `-- h.xls
`-- CB
|-- h.doc
`-- hd.xls
5 directories, 10 files
실행 명령:
$ find Source -type d -exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' -exec rsync -a {} Dest/ ';'
검사 결과:
$ tree Dest
Dest
|-- A
| |-- a.wav
| |-- hs.doc
| `-- hy.xls
`-- CA
|-- d.wav
|-- h.doc
`-- h.xls
2 directories, 6 files
디렉터리 Dest
가 존재하지만 비어 있습니다.