Aquí hay un ejemplo Automatizador flujo de trabajo que puede ser útil.
Ejemplo shell script código para el Ejecutar Shell script acción :
d="$HOME/Documents/Orders"
for f in "$@"; do
if [[ ${f##*/} =~ ([[:alpha:]]{2,8})([[:digit:]]{2})(.*) ]]; then
c="$match[1]"
y="$match[2]"
[ ! -d "$d/20$y/$c/" ] && mkdir -p "$d/20$y/$c/"
mv -n "$f" "$d/20$y/$c/"
fi
done
Notas:
Cambia el valor de d
a la nombre de ruta completamente calificado del, por ejemplo Pedidos directorio .
En este ejemplo Automatizador flujo de trabajo la configuración de la Ejecutar Shell script acción son: Shell: [/bin/zsh] y Pasa la entrada: [como argumentos] .
Notas:
Como dije, "Aquí hay un ejemplo Automatizador flujo de trabajo ..." y es sólo eso, un ejemplo . La parte principal es la shell script código en Ejecutar Shell script acción ya que hace el verdadero trabajo. Por lo tanto, cualquiera que sea la forma en que desee el flujo de trabajo para pasar un lista de la calificación archivos a la Ejecutar Shell script acción aunque se modifique el código según sea necesario en función de cómo quiera el archivos aprobado, deberías estar en el negocio. Cualquier archivos que no coincide con el regex se ignoran.
Dirigiéndose a un comentario, también hay que tener en cuenta que mientras mkdir -p "$d/20$y/$c/"
no necesita ser probada explícitamente, sin embargo, es una fuerza de la costumbre de codificación si se quiere, utilizada en paradigmas similares. Puede omitir el [ ! -d "$d/20$y/$c/" ] &&
parte de esa comando si así lo desea. Sin embargo, dicho esto, yo lo dejaría como [ ! -d "$d/20$y/$c/" ] &&
utiliza el zsh
comando integrado en el shell para [
y la comprobación de su existencia incurre en una sobrecarga mucho menor que la ejecución innecesaria del mkdir
comando cada vez que el objetivo directorio ¡ya existe!
Una forma diferente Automatizador flujo de trabajo
Como ejemplo, el Automatizador flujo de trabajo podría consistir sólo en el Ejecutar Shell script acción con lo siguiente ejemplo shell script código :
d="$HOME/Documents/Orders"
cd "$d" || exit
[ -z "$(ls *.[pP][dD][fF])" ] && exit
for f in *.[pP][dD][fF]; do
if [[ $f =~ ([[:alpha:]]{2,8})([[:digit:]]{2})(.*) ]]; then
c="$match[1]"
y="$match[2]"
[ ! -d "$d/20$y/$c/" ] && mkdir -p "$d/20$y/$c/"
mv -n "$f" "$d/20$y/$c/"
fi
done
Notas:
Cambia el valor de d
a la nombre de ruta completamente calificado del, por ejemplo Pedidos directorio .
En este ejemplo Automatizador flujo de trabajo la configuración de la Ejecutar Shell script acción son: Shell: [/bin/zsh] y Pasa la entrada: [a stdin] .
Lo que el ejemplo shell script código lo hace:
d="$HOME/Documents/Orders"
-- Establece el valor de la d
variable a la ubicación de destino del archivos para ser procesado.
cd "$d" || exit
-- Cambia de directorio al objetivo directorio o sale del script .
[ -z "$(ls *.[pP][dD][fF])" ] && exit
-- Comprobar la existencia del objetivo PDF archivos y sale del script si no existe ninguno en la ubicación de destino. Esta prueba es necesaria para evitar un error en el for
bucle para mantener la Automatizador flujo de trabajo de lanzar un error si se ejecuta y no hay objetivo PDF archivos existe.
for f in *.[pP][dD][fF]; do
-- Para cada objetivo PDF archivo hacer algo.
if [[ $f =~ ([[:alpha:]]{2,8})([[:digit:]]{2})(.*) ]]; then
-- Si el objetivo archivo coincide con el regex Entonces, haz algo.
c="$match[1]"
-- Establece el valor de la c
variable a la Código del cliente . El valor de la primera Grupo de captación de la regex .
y="$match[2]"
-- Establece el valor de la y
variable a la Año . El valor de la segunda Grupo de captación de la regex .
[ ! -d "$d/20$y/$c/" ] && mkdir -p "$d/20$y/$c/"
-- Si el objetivo directorio no existe, entonces créalo.
mv -n "$f" "$d/20$y/$c/"
-- Mover el objetivo archivo al objetivo directorio .
fi
-- Cierra el if
bloque de declaraciones .
done
-- Cierra el do
bucle .
Explicación del Regex: