Эти примеры работают в любой оболочке POSIX и не требуют внешних программ.
Это сохраняет файлы Part * .mp3 на том же уровне, что и каталог проекта:
(cd Project && for i in Part*/audio.mp3; do echo mv "$i" ../"${i%/*}".mp3; done)
Это сохраняет файлы Part * .mp3 в каталоге проекта:
for i in Project/Part*/audio.mp3; do echo mv "$i" ./"${i%/*}".mp3; done
Эти решения используют сопоставление с образцом оболочки
расширение параметра
для создания нового имени файла.
$ {параметр% word} Удалить наименьший шаблон суффикса. Слово расширяется , чтобы получить узор. Затем расширение параметра приводит к параметру, причем наименьшая часть суффикса , соответствующая шаблону, удалена.
Моей первой мыслью был сценарий-оболочка, в котором вы предоставляете доступ sudo к этому сценарию, а затем выполняете проверку параметра -в этом сценарии.
username ALL=/usr/local/sbin/shutdown-wrapper
А потом что-то подобное для обёртки -выключения:
#!/bin/sh
case $1 in
*[!0-9]*) echo Invalid; exit 2;;
esac
if [ "$1" -ge 180 ]
then
/usr/sbin/shutdown +"$1"
else
echo Invalid
exit 2
fi
... и попросите пользователя вызвать sudo /usr/local/sbin/shutdown-wrapper N
, где N — количество минут.
Другой вариант — расшифровать, используя диапазоны символов из раздела Подстановочные знаки справочной страницы sudoers:
username ALL=(ALL:ALL) /usr/sbin/shutdown +18[0-9], \
/usr/sbin/shutdown +19[0-9], \
/usr/sbin/shutdown +[2-9][0-9][0-9], \
/usr/sbin/shutdown +[1-9][0-9][0-9][0-9]*
Здесь указаны минуты со 180 по 189, со 190 по 199, с 200 по 999, а затем любое (числовое или иное! ), который начинается как минимум с 4 цифр, первая из которых не может быть нулевой. Это допустило бы недопустимые временные диапазоны, такие как /usr/sbin/shutdown +9999jeff
, что просто привело бы к ошибке синтаксического анализа изshutdown
:
Failed to parse time specification: +9999jeff