Copie archivos específicos y mantenga la estructura de la subcarpeta

2

Obtuve una carpeta con una gran cantidad de archivos con diferentes sufijos en varias subcarpetas.

El flujo de trabajo de mi automatizador funciona de la siguiente manera:

  1. pedir artículos del buscador
  2. Obtener contenido de carpeta (opción de subcarpeta marcada)
  3. Elementos del buscador de filtros (para un sufijo de archivo específico)
  4. Copiar elementos del buscador

Esto funciona como un encanto. Pero todos los archivos se copian en la misma carpeta de destino raíz. Necesito mantener la estructura de la subcarpeta. Por ejemplo:

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

Resultado esperado (filtro para el sufijo de archivo .xls):

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

Resultado actual:

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

Actualizar

Soy un desarrollador. Así que también se aceptará un shell o AppleScript. :)

    
pregunta Tino Rüb 17.02.2016 - 21:39

3 respuestas

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

Tenga en cuenta que / al final de la ruta de origen, es importante . Esta solución agregaría todos los directorios vacíos, si no los quiere, consulte la opción --prune-empty-dirs .

Con la expansión de llaves, puedes incluir más tipos de archivos a la vez, en lugar de tener

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

puedes usar

--include='*.'{xls,pdf,txt}
    
respondido por el Manuel 18.02.2016 - 15:30
1

Terminé con un script de shell, que funciona según lo solicitado:

$ find ./sourceFolder -name "*.xls*" -type f -print0 | xargs -0 -I '{}' /usr/bin/rsync -avR "{}" "./destinationFolder/"
    
respondido por el Tino Rüb 17.02.2016 - 22:39
0

En un script de shell, puede usar mkbom para crear un archivo de lista de materiales (BOM) que contenga una lista de archivos que desea copiar. Luego, puede usar el comando ditto con la opción --bom para copiar solo los archivos listados en el archivo de la lista de materiales.

    
respondido por el iWill 17.02.2016 - 22:48

Lea otras preguntas en las etiquetas