0 votos

¿Puede Automator distribuir un gran número de archivos en subcarpetas contadas?

Me gustaría crear una aplicación de Automator que cuente los archivos en la carpeta host, cree una subcarpeta numerada llamada " [nombre de la carpeta del host] [contador] ", mueve como máximo 128 archivos de hostFolder en orden secuencial a esta nueva subcarpeta, y hace un bucle hasta que todos los archivos de hostFolder estén ordenados en subcarpetas (es decir, la última subcarpeta tendrá menos de 128 archivos en ella). Antes de que se ejecute el flujo de trabajo, la carpeta principal siempre contendrá sólo archivos, sin subcarpetas.

Este es el resultado deseado de mi flujo de trabajo ideal utilizando como ejemplo una carpeta arbitraria que contiene un número arbitrario de archivos, también nombrados arbitrariamente. (Tenga en cuenta que no necesito que el flujo de trabajo cambie el nombre de ningún archivo):

Una carpeta llamada Beans contiene 1027 archivos, los archivos Legume 0001 a Legume 1027. Mi aplicación Automator recibe la carpeta Beans como entrada. Una vez que el flujo de trabajo se ha ejecutado, la carpeta Beans ahora contiene 9 subcarpetas, llamadas Beans 1, Beans 2, Beans 3, y así sucesivamente hasta Beans 9.

La subcarpeta Beans 1 contiene los archivos Legume 0001, Legume 0002, Legume 0003, y así sucesivamente hasta Legume 0128. La subcarpeta Beans 2 contiene los archivos Legume 0129 a Legume 0256. En otras palabras, cada subcarpeta contiene 128 de los archivos llamados Legume **** en orden secuencial. La única excepción es la última subcarpeta, Beans 9, que contiene sólo 3 archivos, los archivos Legume 1025, Legume 1026 y Legume 1027.

1voto

user3439894 Puntos 5883

Esto debería hacer lo que has pedido. Tal y como está codificado, lo único que puede tener que cambiar en el bash script es filesPerSubDir="128" si quieres un recuento de archivos diferente por subdirectorio dentro del directorio padre que se pasa al Run Shell script acción .

Añade un Shell Run script acción a su aplicación/servicio/flujo de trabajo de Automator y establezca Shell: /bin/bash y Pass input: as arguments . Eliminar el valor por defecto código y luego copiar y pegar el código a continuación en el Shell de ejecución de Automator script acción .


#!/bin/bash

filesPerSubDir="128"

for argument in "$@"; do
    if [[ -d $argument ]]; then
        cd "$argument" || exit 1
        dirName="$(basename "$argument")"
        fileCount="$(find . -maxdepth 1 -flags nohidden -type f ! -iname ".*" | awk 'END{print NR}')"
        subDirCount="$(( fileCount / filesPerSubDir + 1 ))"
        for (( i = 1; i < subDirCount+1; i++ )); do
            find . -maxdepth 1 -flags nohidden -type f ! -iname ".*" | head -$filesPerSubDir > .moveList
            if [[ -s  .moveList ]]; then
                mkdir "$dirName $i"
                while IFS= read -r file; do
                    mv "$file" "$dirName $i"
                done < .moveList
            fi
        done
        rm .moveList
    fi
done

La siguiente imagen muestra una prueba del código y el flujo de trabajo se ha completado con éxito, como indican los círculos verdes con la marca de verificación. Esto es sólo un ejemplo de cómo implementar el Run Shell script. acción puede hacerse de varias maneras, sin embargo, sólo tiene que elegir el método que desea pasar las carpetas en el Finder a la misma, el resto se hace por el script .

Automator window


La siguiente imagen muestra el código con resaltado sintáctico y se incluye porque ayuda a la lectura del código (especialmente cuando el código no se comenta, lo siento no tengo tiempo en este momento).

syntactical highlight code


Nota: El bash script no es codificado para manejar una nueva línea incrustada en el nombre de un objeto del sistema de archivos, que, en primer lugar, no debe estar ahí. Siéntete libre de modificar lo que necesites/quieras para satisfacer tus necesidades, añadiendo/modificando código y o la comprobación adicional de errores si/cuando se quiere/necesita. Además, esta no es en absoluto la única forma de código el script para manejar lo que quieres automatizado, pero es lo que tiré juntos para conseguir algo publicado para usted. Si usted tiene alguna pregunta, simplemente pregunte.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X