Войти

Показать полную графическую версию : Помогите написать скрипт на Bash


VORONUK
22-03-2013, 14:08
Доброе время суток.

Помогите пожалуйста написать скрипт на Bash"е.

Установленна samba, Fedora 17. Путь к розшаренной папке /home/backup/dostup . В доступе, папки созданы таким образом, что есть:
- папка для всех юзеров
- отдел
- фамилия

Скрипт будет запускаться с /opt

Надо сделать так, что бы скрипт копировал файлы которым больше двух недель в /home/backup/old_dostup_files), а потом удалял файлы и папки, внутри папки "- фамилия". Ходил по отделам и чистил. Само дерево папок, удалять нельзя. Отделов больше 10-ти, фамилий больше 100 (фамилии удалять нельзя).

Для того, что бы не засорять локальный файлообменник.

Если у кого-то, есть какие-то ссылочки, на почти готовое, буду только рад. Попробую методом тыка допилить ))

Спасибо.

vadblm
22-03-2013, 19:56
Примерно такую команду в 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 {} \;

VORONUK
25-03-2013, 15:33
Спасибо большое... Всего лишь одна строчка )))) А я ма :))) Срочно учить баш :))

vadblm
25-03-2013, 19:58
Всего лишь одна строчка )))) А я ма )) Срочно учить баш ) »
Ну это не баш, а одна команда - find. Она мощная. ;)
Да и не сделает всё по уму, пустые папки останутся. Тут вам придумывать, как решать. Можно в корне юзера сделать неудаляемый файл типа .noremove и chattr +i его. Можно покрутить права и в find их учитывать.

VORONUK
18-09-2013, 17:16
Всё бы ничего, но... )))
Чуть не подошел вариант. Т.к. пользователи переписывают файлы и папки, с разной датой. Получается что: удаляется всё, что старше 14-ти дней (да, всё удаляется правильно). Удаляет чуть не то, а именно: папка и файлы были созданы (например) 2 месяца назад, в доступ их выложили вчера, а оно его потёрло. И понятно почему, т.к. старше 14-ти дней.

Можно ли как-то выбрать что-то типа даты записи в шару, потом что бы команда искала какие файлы и папки (можно просто файлы), были созданы , сохраняла в файл, и потом другая команда удаляла это всё дело, можно просто файлы.

Или я не от туда начинаю? или не правильно представляю?

vadblm
18-09-2013, 17:55
Чуть не подошел вариант. Т.к. пользователи переписывают файлы и папки, с разной датой. Получается что: удаляется всё, что старше 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