Mon projet
Je crée un script shell bash à exécuter à partir du terminal. Son but est d'archiver des tas de dossiers de projets. Chaque dossier fait suite à une nomenclature prescrite: [YYYY.MM.DD] - Medium - Client - Project name - details--details - JobNumber
. Par exemple: [2006.02.01] - Print - Development - Appeal I - Kids Art Show Insert - D0601-11
. Ces projets sont actuellement un dossier. Je veux les classer dans des dossiers par nom de client. Il y a 7 clients (internes), j'utilise donc le script shell suivant:
#!/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
Mon problème
Mon script mal analyser et mal enregistrer un projet nommé [2006.03.01] - Print - Development - Academics and Accreditation - D0601-08
. Il faudrait lire "Universitaires" avant de passer au conditionnel pour le client "Développement". En conséquence, il s'agirait de fichiers dans "Universitaires". Et je devrais le ramasser à la main!
L'avantage de mon système
Mes collègues et moi avons scrupuleusement scrupuleusement respecté notre nomenclature (décrite ci-dessus). Je sais que le nom du client se situe entre le deuxième et le troisième tiret.
Ma question
Comment exploiter les avantages de mon système pour résoudre mon problème? Je veux que ce script ne corresponde qu'à la partie du nom de dossier qui vient après les deux premiers traits d'union et avant le troisième trait d'union, c'est-à-dire que je veux seulement que ce script recherche le "champ" Client dans le nom du dossier. Je continue de penser aux "expressions régulières" mais je ne sais pas comment les mettre en oeuvre.
Remarque: Je préfère une solution pour augmenter mon script actuel plutôt que de le remplacer. J'y suis arrivé via @patrix sur ce site et son idée a permis d'éviter certaines erreurs.
*- Academics -*
?