Команда grep/egrep
"фильтрует" строки - оставляя только "подходящие" под шаблон
egrep шаблон [ file ... ]
В шаблон могут входить обыкновенные символы (представляющие сами себя, а так же - спецсимволы, выполняющие служебные функции шаблона: . * ^ $ [ ]
. | - любой произвольный символ |
* | - "множитель" (предыдущий символ любое число раз) |
.* | - любая последовательность символов |
^шаблон | - привязываем шаблон к началу строки |
шаблон$ | - привязываем шаблон к концу строки |
[символы] | - ровно один символ из тех, что стоит в скобках |
Вывести всех привелигированных пользователей:
egrep ':0:0:' /etc/passwd
Вывести всех непривелигированных пользователей:
egrep -v ':0:0:' /etc/passwd
Вывести всех пользователей, имена которых начинаются с букв a,b,e,d
cat /etc/passwd | grep "^[abed].*"
Команда find
find рекурсивно обходит указанные каталоги и файлы, проверяет для них выполнение указанных условий, и может вдобавок выполнять с найденными файлами указанные действия. Например самое простое действие - распечатать имя файла.
find файл [ ... ] ключи/условия/действия
Ключи-условия команды find:
-name "*.c" | - простое имя подходит под шаблон *.c |
-type f | - брать только обыкновенные файлы |
-type d | - брать только каталоги |
-size +500 | - файлы размером БОЛЬШЕ 500*512 байт |
-mtime -3 | - дата модификации МЕНЬШЕ 3-х дней |
-newer filename | - дата модификации нашего файла МЕНЬШЕ чем у заданного файла filename |
ВНИМАНИЕ: Команда find использует стандартные SHELL'овские шаблоны. Команда grep использует шаблоны другого формата, называемые регулярными выражениями.
Ключи-действия команды find
-print
- просто распечатать маршрутное имя файла-exec команда над файлом {} \;
- выполнить команду над файлом
Примеры
Напечатать имена всех обыкновенных Си-шных файлов, изменившихся за последние 4 дня в текущем каталоге и его подкаталогах.
find . -type f -mtime -4 -print
Уничтожить все файлы с окончаниями *.bu, *%, которые не менялись больше месяца.
find / \( -name "*.bu" -o -name "*%" \) -type f \ -atime +30 -exec rm {} \;
запись "rm {} \;" - обозначает команду Unix, которая будет выполняться для всех таких найденных файлов. Вместо значка "{}" будет подставляться каждый раз имя найденного файла. Естественно, что таким образом мы их все и уничтожим.