2 votos

Automatizar el movimiento y el cambio de nombre de archivos

Tengo archivos anidados en varias sub-carpetas. Quiero mover estos archivos, una carpeta de la estructura de la carpeta y el nombre de los archivos como por su nueva carpeta principal. Voy a necesitar esto para ser automatizado con una secuencia de comandos.

Ejemplo de lógica

  1. Encontrar la Raíz de la carpeta
  2. Obtener el contenido de la Subcarpeta de la Subcarpeta archivos.
  3. Mover los archivos a su carpeta principal (también conocido como 'Adjuntos' carpeta)
  4. Cambiar el nombre de los archivos con su actual Padre de la carpeta de nombre.
  5. Eliminar vacío Subcarpeta
  6. Lazo por encima de la acción de la Raíz de la carpeta de carpetas hasta que se completa.

El cambio de nombre de los detalles

Archivos adjuntos carpeta de uno a muchos de archivo de .png o .jpg. Por ejemplo, los archivos Adjuntos de la carpeta podría tener Apple.png y Dog-house.jpg. Si estos archivos se mueve y cambia el nombre, estoy esperando el nombre del archivo a ser algo como esto MCP##-##### - abc.png y MCP##-##### - abc.jpg.

Si hay más de un archivo con el mismo tipo de archivo, a continuación, la forma de nombrar a ser algo como esto MCP##-##### - abc.png y MCP##-##### - abc (1).png

Ejemplo de estructura de carpetas

enter image description here

Resultado Deseado

![enter image description here

Estoy asumiendo que esto puede requerir de Automatizar con un guión, pero no tengo idea de cómo hacerlo. Alguien me puede ayudar?

2voto

user3439894 Puntos 5883

El siguiente es un ejemplo de Automator de flujo de trabajo que logra el objetivo declarado de su pregunta por su definida jerárquica de la estructura de la carpeta.

NOTA: Mientras que el ejemplo bash código utilizado en el Ejecutar el Shell Script de acción se completó con éxito, sin embargo, la responsabilidad recae sobre el usuario para asegurar existen copias de seguridad antes de usarlo. Incluso me sugieren hacer una pequeña muestra de la copia de la meta jerárquica de la estructura de la carpeta para realizar la prueba antes de ejecutar el flujo de trabajo en el objetivo original.

Para el propósito de las pruebas de este flujo de trabajo, la siguiente jerárquica de la estructura de la carpeta con sus archivos fue creado:

$ tree ./Applications
./Applications
├── MCP19-00633 - Sport and Play at Br
│   └── Attachments
│       ├── barfoo.png
│       ├── filename.jpg
│       ├── filename.png
│       └── foobar.jpg
├── MCP19-00753 - Active Nabiac
│   └── Attachments
│       ├── barfoo.png
│       ├── filename.jpg
│       ├── filename.png
│       └── foobar.jpg
└── MCP19-00824 - A Family Friendly Ve
    └── Attachments
        ├── barfoo.jpg
        ├── barfoo.png
        ├── filename.jpg
        ├── filename.png
        ├── foobar.jpg
        ├── namefile.jpg
        └── namefile.png

6 directories, 15 files
$ 

Los resultados de la Automator flujo de trabajo ejecutar en el destino anterior:

$ tree ./Applications
./Applications
├── MCP19-00633 - Sport and Play at Br
│   ├── MCP19-00633 - Sport and Play at Br (1).jpg
│   ├── MCP19-00633 - Sport and Play at Br (1).png
│   ├── MCP19-00633 - Sport and Play at Br.jpg
│   └── MCP19-00633 - Sport and Play at Br.png
├── MCP19-00753 - Active Nabiac
│   ├── MCP19-00753 - Active Nabiac (1).jpg
│   ├── MCP19-00753 - Active Nabiac (1).png
│   ├── MCP19-00753 - Active Nabiac.jpg
│   └── MCP19-00753 - Active Nabiac.png
└── MCP19-00824 - A Family Friendly Ve
    ├── MCP19-00824 - A Family Friendly Ve (1).jpg
    ├── MCP19-00824 - A Family Friendly Ve (1).png
    ├── MCP19-00824 - A Family Friendly Ve (2).jpg
    ├── MCP19-00824 - A Family Friendly Ve (2).png
    ├── MCP19-00824 - A Family Friendly Ve (3).jpg
    ├── MCP19-00824 - A Family Friendly Ve.jpg
    └── MCP19-00824 - A Family Friendly Ve.png

3 directories, 15 files
$ 

La imagen de abajo el ejemplo de Automator flujo de trabajo contiene las acciones utilizados y su particular configuración utilizada desde sus valores predeterminados. Asegúrese de que coincida con la configuración que se muestra en la imagen. En particular, el de Obtener el Contenido de la Carpeta acción tiene el [√] Repita el procedimiento para cada subcarpeta que se encuentra marcada, y al Ejecutar el Shell Script de acción ha de Pase de entrada: establece como argumentos.

Automator workflow Image




Ejemplo bash código de:

for f in "$@"; do

    [[ -f $f ]] || continue

        ext="${f##*.}"
        move_to_dir="$(dirname "$(dirname "$f")")"
        filename="$(basename "$move_to_dir")"

        cd "$move_to_dir" || exit

        if [[ ! -e ${filename}.${ext} ]]; then
            mv "$f" "${filename}.${ext}"
        else
            n=1
            for i in "${filename}" *".${ext}"; do
                if [[ "${filename} (${n}).${ext}" == "$i" ]]; then
                    n=$(( n + 1 ))
                fi
            done
            mv "$f" "${filename} (${n}).${ext}"
        fi
done

for d in "$@"; do
    [[ -d $d ]] || continue
    [[ $(basename "$d") == Attachments ]] || continue
    rmdir "$d"
done

Nota: El ejemplo bash código es sólo eso y sólo contiene mínimo de errores de manejo, y se comprobó el uso de ShellCheck. Sin embargo, puede no contener todas las necesitaba/quería manejo de errores. La responsabilidad recae sobre el usuario para agregar cualquier error de manipulación como puede ser apropiado, necesitaba o quería.

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: