copie todo o conteúdo da pasta - não apenas o arquivo gerado [duplicado]

1

Eu gostaria de usar find e rsync para copiar qualquer diretório que contenha pelo menos um arquivo "wav". A cópia deve copiar a pasta inteira se um arquivo "wav" estiver presente. Eu tenho isso até agora:

find . -name "*.wav" | rsync -armR --include="*/" --include="*.wav" --exclude="*" /users/lukew/desktop/merged /users/lukew/desktop/123;

Isso é bom porque a saída é distribuída no diretório correto no nível de saída como um único arquivo "wav". Eu também gostaria que os outros arquivos no diretório fonte fossem incluídos ao mesmo tempo para acompanhar o arquivo "wav" no diretório de saída.

    
por Luke W 23.09.2017 / 18:12

1 resposta

1

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.

    
por 23.09.2017 / 18:48

Tags