Большинство файловых систем не хранит время создания файла, таким образом, лучшее, которое можно сделать, проверить в прошлый раз, когда файл был изменен.
Если у Вас есть последняя версия GNU, находят (например, на Linux или Cygwin) или FreeBSD или OSX, можно непосредственно сравнить дату файла с тем из другого файла. Кроме того, эти версии находки могут использовать время создания файла (названный его временем рождения, указанным с a B
) если это доступно в Вашей системе. Замена B
m
ниже для использования времени изменения, а не времени рождения.
find /path/to/directory -newerBt '2009-01-01' ! -newerBt '2010-01-01' -type f -delete
Выполните его однажды без -delete
сначала для проверки это файлы, которые Вы хотите. Команда выше также удалит файлы в подкаталогах; если это не желаемо, добавить -mindepth 1 -maxdepth 1
после имени каталога.
Если Ваша версия find
не имеет -newerXY
основной, необходимо будет создать файлы метки времени для маркировки границ диапазона времен, которым Вы хотите соответствовать.
touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
find /path/to/directory -newer /tmp/from ! -newer /tmp/to -type f -exec rm {} +
Спецификаторы шарика Zsh могут соответствовать файлам во временном интервале, но границы могут только быть обозначены относительно текущей даты (например, дни несколько N назад).
rm /path/to/directory/*(.m+566^m+931)
Можно также использовать файлы метки времени для точных дат, но Вы проигрываете в краткости.
touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
rm /path/to/directory/*(.e\''[[ $REPLY -nt /tmp/from && $REPLY -ot /tmp/to ]]'\')
Добавьте правило sudo позволить тому пользователю запускать Ваш скрипт. Выполненный visudo
и добавьте что-то вроде этого к sudoers
файл:
Defaults!/path/to/bridge env_reset
alice, bill ALL = (root) /path/to/bridge
Обратите внимание, что его позволяет пользователям передавать любой аргумент /path/to/bridge
программа. Добавить ""
в конце строки для запрещения передачи любых аргументов.
Для более легкого управления пользователями можно предпочесть определять группу пользователей, которым разрешают управлять мостом. Замена alice, bill
%bridgers
где bridgers
имя группы.
В bridge
программа, $SUDO_UID
идентификатор пользователя пользователя, который вызвал sudo
. Если программа требует что пользователь быть в USER
переменная, запишите маленький сценарий оболочки обертки, который устанавливает USER=$SUDO_UID
.
Можно ограничить в sudoers команды, которым позволяют работать с sudo.
Запишите маленький сценарий ./bridge
тот вызов sudo ./real-bridge
и дайте пользователям право работать./real-bridge как корень через sudo.
Я не уверен, работает ли это с eth устройствами, но этим, люди делают с устройствами бочки.
$ tail -n1 /etc/udev/rules.d/20-kvm.rules
KERNEL=="tun", NAME="net/%k", GROUP="mygoodusers", MODE="0660"
Посмотрите - ГРУППА = "mygoodusers", РЕЖИМ = "0660" - на той строке. Конечно, необходимо поместить каждого пользователя в ту группу.
udevadm control --reload-rules
но до перезагрузки Вы имеете к chmod/chown вручную.