Você precisa descobrir quais diretórios incluem .wav
files:
find . -type d \
-exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' \
-print
Isso passa por todos os diretórios em .
e tenta o padrão de glob *.wav
em todos eles. Se o padrão não for expandido, então assumimos que não há nenhum arquivo .wav
(isso falhará se houver um arquivo com o nome literal *.wav
em um diretório e nenhum outro arquivo .wav
no mesmo diretório).
Em seguida, podemos incorporar rsync
no comando acima para sincronizar esses diretórios:
find . -type d \
-exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' \
-exec rsync -a {} /path/to/destination/ ';'
Isso criará um subdiretório sob /path/to/destination
para cada diretório encontrado para conter um arquivo .wav
.
Teste:
$ 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
Executando o comando:
$ find Source -type d -exec sh -c 'set -- "$1"/*.wav; [ -e "$1" ]' sh {} ';' -exec rsync -a {} Dest/ ';'
Verificando o resultado:
$ tree Dest
Dest
|-- A
| |-- a.wav
| |-- hs.doc
| '-- hy.xls
'-- CA
|-- d.wav
|-- h.doc
'-- h.xls
2 directories, 6 files
O diretório Dest
já existia, mas vazio.