пятница, 22 апреля 2011 г.

Утилита find

ключи и их параметры обрабатываются слева направо:

find /home -type f -atime +30 -size +1000 -print \
-name core -exec rm {} \;

Эта команда сработает так:
• покажет все файлы в папке хом, к которым обращались больше 30 дней назад, которые размером больше в 500 кБт.
• при этом те, у которых имя кор, будут удалены.
Если не указать принт перед нейм кор, то будут отображены только файлы кор. Это потому что в новых дистрибутивах принт поумолчанию ставится в конец указанных команд. (в старых системах принт нужно всегд указывать явно).


Основные опции поиска

-atime n -- со временем досупа н дней назад
-mtime n -- со временем модификации назад
-size n -- с размером в н*512 байт
-type c -- файл -f, директория -d
-name nam -- именем (можно ваилдкасты)
-fstype typ -- тип файловой системы
-user usr -- хозяин файла
-group grp -- група файла
-nouser -- такого пользователя нет в /етс/пасворд
-nogroup -- такой группы нет в /етс/груп
-newer file -- файл новее чем указанный для сравнения

-perm 755 -- точное значение прав доступа
-perm -002 -- главное чтобы у других были права на запись все остальное пофиг


-print -- сказано выше
-print0 -- разделять найденные результаты не \n , а \0 (для того чтобы различать где пробел в имени файла, а где символ указующий следующий результат поиска)
-ls -- вывести полный список х-к файлов
-exec cmd -- выполнить на каждом успехе поиска команду {} - это то, что найдено. \; - это конец команды.
-ok cmd -- это екзек с конфирмацией.
-xdev -- не искать в примаунтенных удаленных файловых системах
-prune -- не искать вглубь в перечисленных директориях

к числовым значениям можно ставить +/- указывая больше или меньше чем.

можно обьединять в логические условия
\( -atime +7 -o -mtime +30 \) -- это ИЛИ

А вот отрицание:
! -name gold.dat -name \*.dat
что означает -- все файлы дат, кроме с именем голд.

Вообще-то все опции по-любому обьединяются логически, они обьединены логическим И
Если написать:

find / \( -name a.out -o -name core -o -name '#*#' \) -type f -atime +14 -exec rm -f {} \; -o -fstype nfs -prune

то если условия подошли до последнего -o (перед -fstype), то дальше проверка просто не идет.
Если же не подошло, то идет проверка условий после последнего ИЛИ, и если мы оказались в папке нфс, то тут происходит обрыв-- мы не ныряем в подпапки для дальнейшего поиска.

Комментариев нет:

Отправить комментарий