Intereting Posts
Git совершает внутри Makefile Команда для печати содержимого перед символом (последний символ в строке) Как исправить «невозможно получить метаданные репозитория» при установке CentOS 6.5 из Kickstart через FTP? Сбой плагина Java в Firefox – Fedora 20 Проверка наличия мобильного модема Dell Precision M4500 с Fedora 17 Как настроить мою точку доступа или сеть? Единственный источник для обоих .ssh / config и / etc / hosts Как узнать, печатает ли программа на stderr или stdout в терминале? Как выйти из TTY и в X сеанс grep + поиск рекурсивного сложного синтаксиса в папке в файлах / скриптах Установите 64-битное приложение (32-битное поле пользователя / 64-битное ядро) debian Chromium – включение модуля расшифровки контента Widevine Как предоставить права пользователю на сервер для использования программ SSH переадресация окна с Xming Идентификация открытых и закрытых IP-адресов / портов сервера

переименовывать файлы, соответствующие определенному значению mtime в каталоге

Я использую простой набор команд оболочки для ежедневного создания mysqldumps. Сценарий вызывается демонами cron. Это выглядит как:

presentdate="`date +%d-%m-%Y_%H:%M.%S`" basedir="/var/db_my_backup" mysqldump -u username -ppassword --all-databases | gzip -9 -c > $basedir/mysqlbackup.$presentdate.sql.gz | find -L $basedir/'*' -type f -mtime +7 exec rm -f {} \; | chown -R user:group $basedir | ( cat <<EOF Copy of MySQL successfully placed in $basedir directory as file named mysqlbackup.$presentdate.sql.gz. Now it is ready to be moved to QNAP backup device as scheduled. EOF cat ) | /bin/mail -s "Report from scheduled job for mysqldumps" root 

Меня беспокоит: как я могу сделать его более элегантным? Можно ли создать функцию для выбора и переименования файлов старше 7 дней? Мне не нравится использовать find, поскольку он вызывает странные предупреждения, например, например:

 find: paths must precede expression Usage: find [-H] [-L] [-P] [path...] [expression] 

с которыми трудно справиться (по крайней мере для меня) в таком скрипте.

Ваш метод удаления старых резервных копий в порядке, и, на мой взгляд, лучше, чем переименование файлов. Самое уродливое в этом – длинная цепочка труб, которые в вашем примере мало служат, но делают линию слишком длинной. Я бы написал его с помощью блока { ... } следующим образом:

 presentdate="`date +%d-%m-%Y_%H:%M.%S`" basedir="/var/db_my_backup" { mysqldump -u username -ppassword --all-databases | gzip -9 -c > $basedir/mysqlbackup.$presentdate.sql.gz find -L $basedir/'*' -type f -mtime +7 -exec rm -v {} \; chown -vR user:group $basedir cat <<EOF Copy of MySQL successfully placed in $basedir directory as file named mysqlbackup.$presentdate.sql.gz. Now it is ready to be moved to QNAP backup device as scheduled. EOF } 2>&1 | /bin/mail -s "Report from scheduled job for mysqldumps" root 

2>&1 ближе к концу – включить вывод ошибки в сообщение электронной почты, вы можете удалить его, если вы этого не хотите. Я также добавил некоторые -v флаги для большей детализации.

Как заметил комментатор, find не дает странных ошибок, если вы используете его правильно. Ошибка в ваших параметрах была find , используя exec вместо -exec . Чтобы получить нужные параметры, играйте с ним немного, в то время как читаете на man find .