Показать полную графическую версию : Помогите написать скрипт на Bash
Доброе время суток.
Помогите пожалуйста написать скрипт на Bash"е.
Установленна samba, Fedora 17. Путь к розшаренной папке /home/backup/dostup . В доступе, папки созданы таким образом, что есть:
- папка для всех юзеров
- отдел
- фамилия
Скрипт будет запускаться с /opt
Надо сделать так, что бы скрипт копировал файлы которым больше двух недель в /home/backup/old_dostup_files), а потом удалял файлы и папки, внутри папки "- фамилия". Ходил по отделам и чистил. Само дерево папок, удалять нельзя. Отделов больше 10-ти, фамилий больше 100 (фамилии удалять нельзя).
Для того, что бы не засорять локальный файлообменник.
Если у кого-то, есть какие-то ссылочки, на почти готовое, буду только рад. Попробую методом тыка допилить ))
Спасибо.
Примерно такую команду в cron раз в сутки:
find /home/backup/dostup -mtime +14 -exec /bin/mv {} /home/backup/old_dostup_files/ \;
Все файлы, изменявшиеся давнее 14 дней будут перемещены в /home/backup/old_dostup_files/ без сохранения относительного пути. Пустые директории также не трогаются, вам надо будет придумать, как их удалять, сделав исключение, чтобы удалялись только папки, которые юзеры сами накропали у себя в шарах.
Без этого условия удаление пустых папок также просто:
find /home/backup/dostup -type d -empty -exec rmdir {} \;
Спасибо большое... Всего лишь одна строчка )))) А я ма :))) Срочно учить баш :))
Всего лишь одна строчка )))) А я ма )) Срочно учить баш ) »
Ну это не баш, а одна команда - find. Она мощная. ;)
Да и не сделает всё по уму, пустые папки останутся. Тут вам придумывать, как решать. Можно в корне юзера сделать неудаляемый файл типа .noremove и chattr +i его. Можно покрутить права и в find их учитывать.
Всё бы ничего, но... )))
Чуть не подошел вариант. Т.к. пользователи переписывают файлы и папки, с разной датой. Получается что: удаляется всё, что старше 14-ти дней (да, всё удаляется правильно). Удаляет чуть не то, а именно: папка и файлы были созданы (например) 2 месяца назад, в доступ их выложили вчера, а оно его потёрло. И понятно почему, т.к. старше 14-ти дней.
Можно ли как-то выбрать что-то типа даты записи в шару, потом что бы команда искала какие файлы и папки (можно просто файлы), были созданы , сохраняла в файл, и потом другая команда удаляла это всё дело, можно просто файлы.
Или я не от туда начинаю? или не правильно представляю?
Чуть не подошел вариант. Т.к. пользователи переписывают файлы и папки, с разной датой. Получается что: удаляется всё, что старше 14-ти дней (да, всё удаляется правильно). Удаляет чуть не то, а именно: папка и файлы были созданы (например) 2 месяца назад, в доступ их выложили вчера, а оно его потёрло. И понятно почему, т.к. старше 14-ти дней. »
Ищите в таком случае по ctime, а не mtime. Правда, гарантированно работать это будет только в случае, если "выложить" значит переместить на другую файловую систему. Ну и если используется самба, может она меняет ctime сама, я сейчас затрудняюсь сказать точно. Впрочем, это легко проверить, ls -lc "свежевыложенный" файл, какую покажет дату.
Инфа для размышления http://www.linux-faqs.info/general/difference-between-mtime-ctime-and-atime
ruslandh
18-09-2013, 19:56
На всякий случай имеется три опции времяни:
-atime - время от последнего обращения (доступа) к файлу
-ctime - время от последнего изминения статуса файла
-mtime - время последней модификации файлов.
В крайнем случае, есть команда touch, которая своим нежным касанием умеет изменять и время доступа к файлу, и время его модификации (на любое), и которую, можно натравить на нужные файлы.
http://sysadmins.ru/topic296860.html
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.