Copia i file specifici e mantieni la struttura della sottocartella

2

Ho una cartella con una grande quantità di file con suffissi diversi in diverse sottocartelle.

Il mio flusso di lavoro dell'automator funziona come segue:

  1. Chiedi elementi del Finder
  2. Ottieni contenuto cartella (opzione sottocartella selezionata)
  3. Elementi del Finder del filtro (per un suffisso di file specifico)
  4. Copia elementi del Finder

Funziona come un fascino. Ma tutti i file vengono copiati nella stessa cartella di destinazione principale. Devo mantenere la struttura della sottocartella. Ad esempio:

sourceFolder
    subfolderA
        fileA.jpg
        fileB.xls
        fileC.xls
    subfolderB
        fileC.jpg
        fileD.xls
        fileE.xls

Risultato previsto (filtro per il suffisso file .xls):

destinationFolder
    subfolderA
        fileB.xls
        fileC.xls
    subfolderB
        fileD.xls
        fileE.xls

Risultato corrente:

destinationFolder
    fileB.xls
    fileC.xls
    fileD.xls
    fileE.xls

Aggiorna

Sono uno sviluppatore. Quindi verrà accettata anche una shell o AppleScript. :)

    
posta Tino Rüb 17.02.2016 - 21:39
fonte

3 risposte

1
rsync -avh --include='*/' --include='*.xls' --exclude='*' path/to/sourceFolder/ path/to/destinationFolder

Nota / alla fine del percorso sorgente, è importante . Questa soluzione aggiungerebbe tutte le directory vuote, se non le vuoi, guarda l'opzione --prune-empty-dirs .

Con l'espansione delle parentesi graffe puoi effettivamente includere più tipi di file contemporaneamente, piuttosto che avere

--include='*.xls' --include='*.pdf' --include='*.txt'

puoi usare

--include='*.'{xls,pdf,txt}
    
risposta data 18.02.2016 - 15:30
fonte
1

Finisco con uno script di shell, che funziona come richiesto:

$ find ./sourceFolder -name "*.xls*" -type f -print0 | xargs -0 -I '{}' /usr/bin/rsync -avR "{}" "./destinationFolder/"
    
risposta data 17.02.2016 - 22:39
fonte
0

In uno script di shell è possibile utilizzare mkbom per creare un file BOM (distinta componenti) che contiene un elenco di file che si desidera copiare. Quindi puoi usare il comando ditto con l'opzione --bom per copiare solo i file elencati nel file BOM.

    
risposta data 17.02.2016 - 22:48
fonte

Leggi altre domande sui tag