Il mio progetto
Sto creando uno script di shell bash da eseguire dal terminale. Il suo scopo è archiviare molte e molte cartelle di progetto. Ogni cartella segue una nomenclatura prescritta: [YYYY.MM.DD] - Medium - Client - Project name - details--details - JobNumber
. Ad esempio: [2006.02.01] - Print - Development - Appeal I - Kids Art Show Insert - D0601-11
. Questi progetti sono attualmente una cartella. Voglio ordinarli in cartelle in base al nome del cliente. Ci sono 7 client (interni), quindi sto usando il seguente script di 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
Il mio problema
Il mio script potrebbe analizzare in modo errato e archiviare erroneamente un progetto denominato [2006.03.01] - Print - Development - Academics and Accreditation - D0601-08
. Avrebbe letto "Accademici" prima che arrivasse al condizionale per il cliente "Sviluppo". Di conseguenza, sarebbe file in "Academics". E dovrei riprenderlo a mano!
Il vantaggio del mio sistema
I miei colleghi e io siamo stati scrupolosi riguardo alla nostra nomenclatura (descritta sopra). So che il nome del cliente rientra tra il 2 ° e il 3 ° trattino.
La mia domanda
Come sfruttare il vantaggio del mio sistema per risolvere il mio problema? Voglio che questo script corrisponda solo alla parte del nome della cartella che viene dopo i primi due trattini e prima del terzo trattino, cioè, voglio solo che questo script cerchi nel "campo" del client nella cartella nome. Continuo a pensare "espressioni regolari" ma non ho idea di come implementarle.
Nota: preferisco che una soluzione aumenti il mio script corrente, piuttosto che sostituirlo. Sono arrivato su @patrix su questo sito e la sua idea ha aggirato alcuni errori.