Мой сайт
Главная | Каталог статей | Регистрация | Вход
Пятница
26.04.2024
15:35
Приветствую Вас Гость | RSS
Главная » Статьи » Linux и Unix

Linux: примеры поиска файлов часть 2

Поиск файлов по имени/расширению

Основное применение команды поиска. Ищем файл (учитывается регистр букв) по имени в текущей директории (каталоге) и во всех поддиректориях.

# find -name "MyCProgram.c"
./backup/MyCProgram.c
./MyCProgram.c

Найти в домашнем каталоге все файлы PowerPoint (.ppt). Обратите внимание, что мы поместили шаблон имени файла в кавычки, чтобы оболочка не развернула его. Мы хотим передать команде именно аргумент *.ppt, а о соответствии шаблону пусть заботится find.

$ find ~ -name '*.ppt'

Найдём все файлы в системе, начинающиеся на top

$ find / -name 'top*'

Найдём список файлов системы, имена которых начинаются с букв top, за которыми следуют еще три символа:

$ find / -name 'top???'

Чтобы получить список файлов системы, имена которых начинаются с букв top, за которыми следуют пять и более символов, введите:

$ find / -name 'top?????*'

Чтобы увидеть все файлы в каталоге /usr/share, содержащие в имени слово farm, введите:

$ find /usr/share -name '*farm*'

Найти обыкновенные файлы (здесь конкретизирован тип), содержащие в имени foo.

find . -type f -iname "*foo*”

Более гибкий, но сложный способ. После –qi можно использовать регулярные выражения.

find . -type f -exec grep -qi "foo” {} ; -print

Используйте -regex вместо -name для поиска файлов, имена которых удовлетворяют регулярному выражению, или образцу, описывающему несколько строк. Чтобы увидеть все файлы в текущем каталоге, имена которых содержат строку net или comm, наберите:

$ find . -regex '.*(net|comm).*'

Примечание: Опция -regex совпадает с полным именем файла относительно указанного каталога, а не с отдельным именем файла.

Список всех файлов текущего каталога, имена которых содержат строку invoice:

$ ls *invoice*

Список всех файлов со строкой invoice в имени, которые содержатся в текущем каталоге и во всех его подкаталогах:

$ ls */*invoice*

Расширяем диапазон поиска до желаемого уровня:

$ ls *invoice* */*invoice* */*/*invoice*

Утилита slocate найдет все файлы, имена которых содержат строку invoice. Так как slocate использует индексированный список имен файлов, то работает она с молниеносной быстротой. Этот индекс формируется программой updatedb (то же самое делает команда slocate с ключом -u), обычно запускаемой раз в день с помощью cron или anacron. В дистрибутиве Ubuntu 7.04 база данных slocateнаходится в файле /var/lib/slocate/slocate.db. Это единственный недостаток slocate — команда не найдет файлы, которые были созданы после последнего запуска updatedb.

$ slocate invoice

Примечаниеs в названии команды slocate восходит к слову «безопасный» ('secure'). И вот в чем здесь дело: программа updatedb (которая строит индекс) работает с привилегиями администратора, чтобы иметь доступ ко всем файлам. Поэтому в индексе slocate.db могут быть файлы, невидимые обычным пользователям (например, системные файлы или личные файлы других пользователей). Индекс slocateвключает информацию о владельце файла и правах доступа, и программа slocate не покажет те файлы, соваться в которые вам не полагается. Раньше была еще программа locate, не отличавшаяся такой щепетильностью, но в современных дистрибутивах Linux slocate и locate указывают на одну и ту же утилиту.

Поиск файла по имени без учета регистра букв

Находит все имена с MyCProgram.c без учёта регистра (прописных и строчных букв) в текущей директории  и во всех поддиректориях.

$ find -iname "MyCProgram.c"
./mycprogram.c
./backup/mycprogram.c
./backup/MyCProgram.c
./MyCProgram.c

Найти подкаталоги определённого владельца

В разделе «что искать» может быть несколько условий, и по умолчанию они объединяются через «логическое И», то есть при поиске отбираются файлы, для которых выполняются все условия. К примеру, поищем подкаталоги в /var, владельцем которых является daemon:

$ find /var -type d -user daemon

Опция -group подобным образом определяет файлы, принадлежащие некоторой группе пользователей. Чтобы вывести список файлов в каталоге /dev, принадлежащих группе audio, введите:

$ find /dev -group audio

Ещё вариант поиска по нескольким критериям

Вы можете определить несколько опций find одновременно, чтобы найти файлы, удовлетворяющие сразу нескольким критериям. 
Чтобы вывести список файлов в домашнем каталоге, имена которых начинаются со строки `top', и которые новее файла /etc/motd, введите:

$ find ~ -name 'top*' -newer /etc/motd [Enter]

Чтобы сжать все файлы в Вашем домашнем каталоге, размер которых превышает 2 Mb, и которые еще не сжаты с помощью gzip (не имеют расширения .gz), введите:

$ find ~ -size +2000000c -regex '.*[^gz]' -exec gzip '{}' ';'

Вариативный поиск: соответствие одному из условий

Объединим условия по «ИЛИ» вместо объединения по «И». В каталоге /etc мы ищем либо файлы, владельцем которых является cupsys, либо пустые файлы:

$ find /etc -user cupsys -or -size 0



Источник: http://bestann.com.ru/comments/linux_find/
Категория: Linux и Unix | Добавил: SAM (20.07.2010)
Просмотров: 5593 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Категории раздела
Мои статьи [0]
Linux и Unix [47]
Все про Linux и Unix
Windows [2]
Все про Windows
Администрирование [5]
Все для Системного администратора
Cisco [2]
Мой опыт работы с кисками
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz