Mi proyecto
Estoy creando un bash script de shell para ejecutar desde el Terminal. Su propósito es el de archivar montones y montones de carpetas del proyecto. Cada carpeta de la siguiente manera prescrita nomenclatura: [YYYY.MM.DD] - Medium - Client - Project name - details--details - JobNumber
. Por ejemplo: [2006.02.01] - Print - Development - Appeal I - Kids Art Show Insert - D0601-11
. Estos proyectos están actualmente en una carpeta. Quiero ordenarlos en carpetas por nombre de Cliente. Hay 7 (interna) de los clientes, así que estoy usando el siguiente script de shell:
#!/bin/bash
# Go to the Completed Projects folder.
cd /Volumes/communications/Projects/Completed\ Projects/
# Find a folder with a specified string (e.g. "Academics") in its name.
# Move (not copy) the folder to its corresponding sub-folder of the Archived Projects folder. (e.g. /Academics)
for folder in *; do
if [[ -d "$folder" ]]; then
if [[ "$folder" == *Academics* ]]; then
echo "Archiving $folder to Archived Projects → Academics...";
mv "$folder" /Volumes/communications/Projects/Archived\ Projects/Academics/
fi
elif [[ "$folder" == *Admissions* ]]; then
echo "Archiving $folder to Archived Projects → Admissions...";
mv "$folder" /Volumes/communications/Projects/Archived\ Projects/Admissions/
fi
elif [[ "$folder" == *Alumni* ]]; then
echo "Archiving $folder to Archived Projects → Academics...";
mv "$folder" /Volumes/communications/Projects/Archived\ Projects/Alumni/
fi
elif [[ "$folder" == *Communications* ]]; then
echo "Archiving $folder to Archived Projects → Academics...";
mv "$folder" /Volumes/communications/Projects/Archived\ Projects/Communications/
fi
elif [[ "$folder" == *Development* ]]; then
echo "Archiving $folder to Archived Projects → Academics...";
mv "$folder" /Volumes/communications/Projects/Archived\ Projects/Development/
fi
elif [[ "$folder" == *President* ]]; then
echo "Archiving $folder to Archived Projects → Academics...";
mv "$folder" /Volumes/communications/Projects/Archived\ Projects/President/
fi
elif [[ "$folder" == *Student\ Life* ]]; then
echo "Archiving $folder to Archived Projects → Academics...";
mv "$folder" /Volumes/communications/Projects/Archived\ Projects/Student\ Life/
fi
else #Folders that don't match the pattern prompt the use to move them by hand.
echo "$folder does not have a Department name. Move it by
done
Mi problema
Mi script mis-analizar y mis-archivo de un proyecto denominado [2006.03.01] - Print - Development - Academics and Accreditation - D0601-08
. Se podría leer "los Académicos" antes de que saliera a la condicional para el cliente "Desarrollo". Como resultado, sería archivos en "los Académicos". Y yo tendría que elegir de nuevo por la mano!
Mi sistema de la ventaja
Mis colegas y yo hemos sido escrupulosos en cuanto a nuestra nomenclatura (descrito anteriormente). Sé que el nombre del Cliente se encuentra entre la 2ª y la 3ª guiones.
Mi pregunta
Cómo aprovechar mi sistema la ventaja de resolver mi problema? Quiero que este script para que coincida con sólo la parte del nombre de la carpeta que viene después de los dos primeros guiones y antes de que el tercer guión, es decir, solo quiero que este script para buscar el Cliente "campo" en el nombre de la carpeta. Yo sigo pensando en "expresiones regulares", pero no tienen idea de cómo llevarlas a la práctica.
Nota: yo prefiero una solución para aumentar mi script actual, en lugar de reemplazarlo. He llegado a ella a través de @patrix en este sitio y su idea de burlar algunos errores.