В результате будет получен файл, дата создания которого — 4 мая, время создания —21:40 (предполагается, что текущее время — 23:40). Теперь можно применить
команду find с опцией -newer для нахождения всех файлов, которые обновлялись в течение последних двух часов:
$ find . — newer dstamp -print
Операционные системы UNIX и Linux поддерживают различные типы файлов (см. главу 1). Поиск файлов нужного типа осуществляется посредством команды, find с опцией -type. Например, для нахождения всех подкаталогов в каталоге /etc воспользуйтесь такой командой:
$ find /etc -type d -print
Чтобы получить список всех файлов, но не каталогов, выполните следующую команду:
$ find . ! — type d -print
Ниже приведена команда, которая предназначена для поиска всех символических ссылок в каталоге /etc.
$ find /etc -type l -print
В процессе поиска размер файла указывается с помощью опции -size n, где N -pазмер файла в блоках по 512 байтов. Возможные аргументы имеют следующие значения:
+N — поиск файлов, размер которых больше заданного,
— N — меньше заданного,
N -pавен заданному.
Если в аргументе дополнительно указан символ 'c', то размер считается заданным в байтах, а не в блоках, а если символ к — в килобайтах.
Для поиска файлов, размер которых превышает 1 Мб, предназначена команда
$ find . — size +1000k -print
Следующая команда выполняет поиск в каталоге /home/apache файлов, размер которых в точности равен 100 байтам:
$ find /home/apache -size 100c -print
Произвести поиск файлов, размер которых превышает 10 блоков (5120 байтов), позволяет приведенная ниже команда:
$ find . — size +10 -print
Опция -depth позволяет организовать поиск таким образом, что сначала проверяются все файлы текущего каталога (и рекурсивно все его подкаталоги) и только в конце — запись самого каталога. Эта опция широко применяется при создании списка файлов, помещаемых в архив на магнитной ленте с помощью команды cpio или tar, так как в этом случае сначала записывается на ленту образ каталога и лишь после этого задаются права доступа к нему. Это позволяет пользователю архивировать те каталоги, для которых у него нет разрешения на запись.
Следующая команда выводит список всех файлов и подкаталогов текущего каталога:
$ find . — name "*" — print -о -name ".*" — print -depth
Вот как могут выглядеть результаты ее работы:
./.Xdefaults
./.bash_logout
./.bash_proflie
./.bashrc
./.bash_history
./file
./Dir/file1
./Dir/file2
./Dir/file3
./Dir/Subdir/file4
./Dir/Subdir
./Dir
Поиск файлов только в текущей файловой системе, исключая другие смонтированные файловые системы, обеспечивает опция -mount команды find . В следующем примере осуществляется поиск всех файлов с расширением хс в текущем разделе диска:
$ find / -name "*.XC" — mount -print
Команда cpio применяется главным образом для записи файлов на магнитную ленту и чтения их с ленты. Очень часто она используется совместно с командой find, по каналу принимая от нее список файлов.
Вот как выполняется запись на магнитную ленту содержимого каталогов /etc, /home и /apps:
$ cd /
$ find etc home apps -depth -print | cpio -ov > dev/rmt0
Опция -o команды cpio задает режим записи файлов на ленту. Опция -v (verbose -cловесный режим) является указанием команде cpio сообщать о каждом обрабатываемом файле.
Обратите внимание на то, что в именах каталогов отсутствует начальный символ '/'. Таким образом задаются относительные путевые имена архивируемых каталогов, что при последующем чтении файлов из архива позволит воссоздавать их в любой части операционной системы, а не только в корневом каталоге.
Предположим, вы нашли нужные файлы и хотите выполнить по отношению к ним определенные действия. В этом случае вам понадобится опция -exec (некоторые системы позволяют с помощью опции -exec выполнять только команды ls или
ls -l). Многие пользователи применяют опцию -exec для нахождения старых файлов, подлежащих удалению. Я рекомендую вместо команды rm выполнить сначала команду ls, чтобы убедиться в том, что команда find нашла именно те файлы, которые нужно удалить.
После опции -exec следует указать выполняемую команду, а затем ввести фигурные скобки, пробел, обратную косую черту и, наконец, точку с запятой. Рассмотрим пример:
$ find . — type f -exec ls -1 {} \;
-rwxr-xr-x
10
root
wheel
1222
Jan 4 1993
./sbin/C80
-rwxr-xr-x
10
root
wheel
1222
Jan 4 1993
./sbin/Normal
-rwxr-xr-x
10
root
wheel
1222
Jan 4 1993
./sbin/Revvid
Здесь выполняется поиск обычных файлов, список которых отображается на экране с помощью команды ls -l.
Чтобы найти файлы, которые не обновлялись в каталоге /logs в течение последних пяти дней, и удалить их, выполните следующую команду:
$ find /logs -type f -mtime +5 -exec rm {} \;