Не думаю, что это очень хорошая идея.
<имя пользователя>
, они могут его настроить. Они могут добиться этого, используя свою собственную запись crontab. Я бы выбрал первый вариант.
Но чтобы конкретно ответить на ваш вопрос, помните, что файл конфигурации можно указать с помощью параметра -c <имя файла>
. Таким образом, потенциально вы можете запустить его, указав файл конфигурации для конкретного пользователя, которым они владеют и администрируют, например.
/usr/bin/rsnapshot -c /home/<username>/.rsnapshot.conf daily
Есть много способов сделать это. Вот одна команда, которая должна работать для вашего примера:
for oldname in *; do
newname="$(echo "${oldname}" | grep -Po 'ID\w?\d+' | tr A-Z a-z).txt" \
&& mv -i "${oldname}" "${newname}";
done
В этом примере использовались Perl -совместимые регулярные -выражения, которые, похоже, ваш grep
не поддерживает. Вот альтернатива с использованием основных регулярных выражений:
for oldname in *; do
newname="$(echo "${oldname}" | grep -o 'ID[A-Z]\?[0-9]\+' | tr A-Z a-z).txt" \
&& mv -i "${oldname}" "${newname}";
done
Далее следует более подробное объяснение.
Выражение for oldname in *
использует подстановочный -шаблон/шаблон для перебора файлов в текущем каталоге и сохраняет каждое имя в переменной oldname
. Чтобы проверить это, вы можете запустить следующее:
for oldname in *; do echo "${oldname}"; done
Затем мы используем grep
для извлечения части имени файла -, которую вы хотите сохранить. Флаг опции -P
указывает grep
использовать Perl -совместимые регулярные выражения (, которые на самом деле не нужны в этой ситуации ), а флаг -o
указывает grep
извлекать только совпадающую подстроку (вместо того, чтобы печатать всю строку ). Шаблон \w?
соответствует одиночному символу опции (, символу «слово» ), а шаблон \d+
соответствует одной или нескольким цифрам. Мы можем протестировать регулярное выражение следующим образом:
for oldname in *; do echo "${oldname}" | grep -Po 'ID\w?\d+'; done
Затем мы используем tr
для преобразования символов верхнего регистра в нижний:
for oldname in *; do echo "${oldname}" | grep -Po 'ID\w?\d+' | tr A-Z a-z; done
Следующим шагом является использование подстановки команд для присвоения этой строки переменной и последующего вывода результата:
for oldname in *; do
newname="$(echo "${oldname}" | grep -Po 'ID\w?\d+' | tr A-Z a-z)" && echo "${newname}"
done
Затем добавляем в файл ".txt" -расширение:
for oldname in *; do
newname="$(echo "${oldname}" | grep -Po 'ID\w?\d+' | tr A-Z a-z).txt" && echo "${newname}"
done
Мы можем запустить эту команду для проверки работоспособности -, чтобы убедиться, что мы получаем ожидаемые результаты. Как только мы будем удовлетворены, мы заменим команду echo
на команду mv
:
for oldname in *; do
newname="$(echo "${oldname}" | grep -Po 'ID\w?\d+' | tr A-Z a-z).txt" \
&& mv -i "${oldname}" "${newname}";
done