0 votos

Automator/AppleScript: mover carpetas a una ubicación basada en su nombre

Soy muy nuevo en el mundo de los scripts y de Automator, pero estoy tratando de encontrar una manera de hacer que las carpetas se muevan automáticamente a una ubicación deseada en función del principio y el final de sus nombres:

If folder name starts with "A" and ends with "45" move to Documents/Archive/A/45

o

if folder name starts with "J" and ends with "29" move to Documents/Archive/J/29

Editar:

  1. El nombre de la carpeta en el mundo real sería: A761245 o J647929
  2. Sí, las carpetas de destino ya existen
  3. No, la carpeta de origen y la de destino están en lugares diferentes.
  4. Estoy ejecutando MacOS Mojave 10.14.6

¿Hay alguna manera de hacer esto con automator o scripting? Gracias.

1voto

user3439894 Puntos 5883

Abrí Terminal que por defecto se abre a los directorio principal y ejecutó lo siguiente comando :

mkdir -p  ./Documents/Archive/A/45 ./Documents/Archive/J/29 A761245 J647929

Esto creó dos nuevos directorios , A761245 y J647929 en el root de mi directorio principal y el estructura jerárquica de directorios dentro de mi Documents directorio para recibirlos cuando se trasladen.

A continuación, utilizo lo siguiente comando compuesto para mover cualquier directorio cuyo nombre comenzó con un carácter alfabético en mayúsculas seguido de seis caracteres numéricos :

for d in *; do [[ -d $d ]] || continue; if [[ $d =~ ^([A-Z])([0-9]{4})([0-9]{2})$ ]]; then mv -n -v "$d" "./Documents/Archive/${BASH_REMATCH[1]}/${BASH_REMATCH[3]}/"; fi; done

El resultado de este comando compuesto era:

A761245 -> ./Documents/Archive/A/45/A761245
J647929 -> ./Documents/Archive/J/29/J647929
$

Este comando compuesto podría utilizarse en un bash script Por ejemplo:

#!/bin/bash

for d in *; do
    [[ -d $d ]] || continue
    if [[ $d =~ ^([A-Z])([0-9]{4})([0-9]{2})$ ]]; then
        mv -n -v "$d" "./Documents/Archive/${BASH_REMATCH[1]}/${BASH_REMATCH[3]}/"
    fi
done

Esto funciona básicamente probando el nombre de cualquier directorio pasado para ajustarse a un carácter alfabético en mayúsculas seguido de seis caracteres numéricos utilizando grupos de captura y BASH_REMATCH para construir el destino adecuado ruta de acceso para el mv comando .

Sé que has dicho que el directorios de destino ya existen y el ejemplo bash código arriba lo da por sentado sin ningún tipo de tratamiento de errores . Dicho esto, sin embargo, se podría añadir una línea de código que crearía la necesaria estructura jerárquica de directorios primero, como en el ejemplo siguiente:

#!/bin/bash

for d in *; do
    [[ -d $d ]] || continue
    if [[ $d =~ ^([A-Z])([0-9]{4})([0-9]{2})$ ]]; then
        mkdir -p "./Documents/Archive/${BASH_REMATCH[1]}/${BASH_REMATCH[3]}"
        mv -n -v "$d" "./Documents/Archive/${BASH_REMATCH[1]}/${BASH_REMATCH[3]}/"
    fi
done

La frase única comando compuesto sería:

for d in *; do [[ -d $d ]] || continue; if [[ $d =~ ^([A-Z])([0-9]{4})([0-9]{2})$ ]]; then mkdir -p "./Documents/Archive/${BASH_REMATCH[1]}/${BASH_REMATCH[3]}"; mv -n -v "$d" "./Documents/Archive/${BASH_REMATCH[1]}/${BASH_REMATCH[3]}/"; fi; done

Utilizaría esta versión del comando compuesto y o bash script .


Nota: Utilizando el -p opción con el mkdir comando creará el estructura jerárquica de directorios según sea necesario sin errar si ya existe. Este sería el camino que yo seguiría para asegurarme de que no intentas mover un directorio de fuentes a un inexistente directorio de destino .

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