Мой проект
Я создаю сценарий оболочки bash для выполнения из терминала. Его целью является архивирование множества папок проекта. Каждая папка соответствует установленной номенклатуре [YYYY.MM.DD] - Medium - Client - Project name - details--details - JobNumber
. Например: [2006.02.01] - Print - Development - Appeal I - Kids Art Show Insert - D0601-11
. Эти проекты в настоящее время находятся в одной папке. Я хочу отсортировать их по папкам по имени клиента. Есть 7 (внутренних) клиентов, поэтому я использую следующий скрипт оболочки:
#!/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
Моя проблема
Мой скрипт будет неправильно анализировать и подавать проект с именем [2006.03.01] - Print - Development - Academics and Accreditation - D0601-08
. Это прочитало бы "Академики" прежде, чем это когда-либо попадало в условное для клиента "Развитие". В результате это будут файлы в «Академики». И мне придется забрать его обратно вручную!
Преимущество моей системы
Мои коллеги и я были очень внимательны к нашей номенклатуре (описано выше). Я знаю, что имя Клиента находится между 2 и 3 дефисами.
Мой вопрос
Как использовать преимущество моей системы для решения моей проблемы? Я хочу, чтобы этот скрипт совпадал только с той частью имени папки, которая идет после первых двух дефисов и до третьего дефиса, т. Е. Я хочу, чтобы только этот скрипт выполнял поиск в «поле» клиента в имени папки. Я продолжаю думать "регулярные выражения", но не знаю, как их реализовать.
Примечание. Я предпочитаю, чтобы решение дополняло мой текущий сценарий, а не заменяло его. Я пришел к этому через @patrix на этом сайте, и его идея обошла некоторые ошибки.
*- Academics -*
?