Mi proyecto
Estoy creando un script de shell bash para ejecutar desde la Terminal. Su propósito es archivar montones y montones de carpetas de proyectos. Cada carpeta sigue una nomenclatura prescrita: [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 son actualmente una carpeta. Quiero clasificarlos en carpetas por nombre de Cliente. Hay 7 clientes (internos), 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 secuencia de comandos analizaría incorrectamente y archivaría erróneamente un proyecto llamado [2006.03.01] - Print - Development - Academics and Accreditation - D0601-08
. Se leería "Académico" antes de llegar al condicional para el "Desarrollo" del cliente. Como resultado, sería archivos en "Académicos". ¡Y tendría que retirarlo con la mano!
La ventaja de mi sistema
Mis colegas y yo hemos sido escrupulosos con respecto a nuestra nomenclatura (descrita anteriormente). Sé que el nombre del Cliente se encuentra entre el segundo y el tercer guión.
Mi pregunta
¿Cómo aprovechar la ventaja de mi sistema para resolver mi problema? Quiero que este script coincida solo con la parte del nombre de la carpeta que aparece después de los dos primeros guiones y antes del tercer guión, es decir, solo quiero que este script busque el "campo" del Cliente en la carpeta nombre. Sigo pensando "expresiones regulares" pero no tengo idea de cómo implementarlas.
Nota: Prefiero una solución para aumentar mi script actual, en lugar de reemplazarlo. Llegué a través de @patrix en este sitio y su idea evitó algunos errores.