Для каждого найденного файла, соответствующего заданному шаблону поиска, выполняет команду COMMAND. Командная строка должна завершаться последовательностью символов \; (здесь символ «;» экранирован обратным слэшем, чтобы информировать командную оболочку о том, что символ «;» должен быть передан команде find как обычный символ). Если COMMAND содержит <> , то find подставляет полное имя найденного файла вместо «<>» .
Не следует путать опцию -exec команды find с внутренней командой Bash — exec.
Пример 12-2. Badname, удаление файлов в текущем каталоге, имена которых содержат недопустимые символы и пробелы.
Пример 12-3. Удаление файла по его номеру inode
Дополнительные примеры по использованию команды find вы найдете в Пример 12-22, Пример 3-4 и Пример 10-9. В страницах справочного ркуоводства (man find) вы найдете более подробную информацию об этой достаточно сложной и мощной команде.
Команда передачи аргументов указанной команде. Она разбивает поток аргументов на отдельные составляющие и поочередно передает их заданной команде для обработки. Эта команда может рассматриваться как мощная замена обратным одиничным кавычкам. Зачастую, когда команды, заключенные в обратные одиночные кавычки, завершаются с ошибкой too many arguments (слишком много аргументов), использование xargs позволяет обойти это ограничение. Обычно, xargs считывает список аргументов со стандартного устройства ввода stdin или из канала (конвейера), но может считывать информацию и из файла.
Если команда не задана, то по-умолчанию выполняется echo. При передаче аргументов по конвейеру, xargs допускает наличие пробельных символов и символов перевода строки, которые затем автоматически отбрасываются.
ls | xargs -p -l gzip — упакует с помощью gzip все файлы в текущем каталоге, выводя запрос на подтверждение для каждого файла.
xargs имеет очень любопытный ключ -n NN, который ограничивает количество передаваемых аргументов за один «присест» числом NN.
ls | xargs -n 8 echo — выведет список файлов текущего каталога в 8 колонок.
Еще одна полезная опция — -0, в комбинации с find -print0 или grep -lZ позволяет обрабатывать аргументы, содержащие пробелы и кавычки.
Обе вышеприведенные команды удалят все файлы, содержащие в своем имени комбинацию символов «GUI» . (Спасибо S.C.)
Пример 12-4. Использование команды xargs для мониторинга системного журнала
Пример 12-5. copydir, копирование файлов из текущего каталога в другое место, с помощью xargs
Универсальный обработчик выражений: вычисляет заданное выражение (аргументы должны отделяться пробелами). Выражения могут быть арифметическими, логическими или строковыми.
expr 5 % 3
expr 5 \* 3
В арифметических выражениях, оператор умножения обязательно должен экранироваться обратным слэшем.
y=`expr $y + 1`
Операция инкремента переменной, то же самое, что и let y=y+1, или y=$(($y+1)). Пример подстановки арифметических выражений.
z=`expr substr $string $position $length`
Извлекает подстроку длиной $length символов, начиная с позиции $position.
Пример 12-6. Пример работы с expr
Вместо оператора match можно использовать оператор :. Например, команда b=`expr $a : 7*` является точным эквивалентом для b=`expr match $a 7*` в примере, рассмотренном выше.
Этот пример демонстрирует необходимость экранирования оператора группировки — \( . \) в регулярных выражениях, при поиске по шаблону командой expr.
Perl, sed и awk имеют в своем распоряжении более мощный аппарат анализа строк. Коротенький скрипт на sed или awk, внутри сценария (см. Section 33.2) — значительно более привлекательная альтернатива использованию expr при анализе строк.
Дополнительные примеры, по обработке строк, вы найдете в Section 9.2.
Источник
Примеры использования программы find с параметром exec
В прошлой статье я писал о программе locate, удобной для быстрого поиска файлов в системе.
Альтернативой locate является программа find : GNU find обходит каждый файл из дерева директорий, подставляя его имя в заданное выражение и проводит вычисление значения выражения слева до получения результата (правая часть выражения ложна для операции логического «и», истинна для логического «или»), на основании которого find принимает решение о выполнении заданного действия и переходит к рассмотрению следующего имени файла.
Программа find может принимать различные аргументы командной строки для создания выражения поиска, а стандартным действием при обнаружении файла с именем, удовлетворяющим выражению, является печать имени файла.
Перед тем, как как привести полезные примеры использования программы find с параметром exec , рассмотрим немного теоретических положений.
Параметры программы find
Наиболее известными параметрами для поиска файлов при помощи программы find , являются:
-name выражение Это наиболее часто используемый параметр для поиска файлов, имена которых (без учета предшествующих им директорий) удовлетворяют заданному выражению.
-mtime n Файлы были изменены n*24 часов назад.
-uid n Системный числовой идентификатор пользователя-владельца файла должен быть равен n .
Действия
При использовании find есть возможность для указания действий, которые будут выполнены при нахождении файла с именем, удовлетворяющим выражению поиска, а наиболее гибким вариантом, без сомнения, является использование параметра exec .
-exec команда; Выполнить команду; выполнение считается успешным в случае статуса выхода, равного нулю. Все символы, следующие за командой, считаются ее аргументами до того момента, как встречается символ «;» . Строка «<>» заменяется на имя рассматриваемого файла каждый раз, когда она встречается среди аргументов команды.
Примеры использования find с параметром exec
Поиск файлов и удаление их при помощи параметра exec является часто встречающимся вариантом использования этого параметра, но вам не нужно использовать exec для этих целей, так как более удачный вариант будет описан позднее.
В старых системах Unix у вас не будет возможности использовать параметр -delete , поэтому альтернатив параметру -exec для удаления файлов в них не остается.
А теперь рассмотрим некоторые другие примеры использования программы find с параметром exec .
При помощи параметра -type f вы можете вести поиск только файлов и просто изменять права доступа к каждому из них при помощи chmod .
В этом примере я использовал параметр -user как альтернативу параметру -uid .
В этом примере я снова использовал параметр -type , но на этот раз с аргументом d для поиска директорий.
Заключение
Как вы убедились, в приведенных выше примерах показано то, что использование программы find с параметром exec позволяет вам выполнять довольно сложные задачи, при этом то обстоятельство, что вы можете выполнять заданное действие только над частью файлов, ставит вас в выигрышное положение.
Источник
Команда find в Linux
Очень важно уметь вовремя и очень быстро найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux. Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения. Кроме того, с найденными файлами можно сразу же выполнять необходимые действия.
В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.
Основная информация о Find
Find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.
Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.
Параметры — дополнительные параметры, например, глубина поиска, и т д
Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.
Шаблон — непосредственно значение по которому будем отбирать файлы.
Основные параметры команды find
Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.
-P никогда не открывать символические ссылки
-L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
-maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
-depth — искать сначала в текущем каталоге, а потом в подкаталогах
-mount искать файлы только в этой файловой системе.
-version — показать версию утилиты find
-print — выводить полные имена файлов
-type f — искать только файлы
-type d — поиск папки в Linux
Критерии
Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.
-name — поиск файлов по имени
-perm — поиск файлов в Linux по режиму доступа
-user — поиск файлов по владельцу
-group — поиск по группе
-mtime — поиск по времени модификации файла
-atime — поиск файлов по дате последнего чтения
-nogroup — поиск файлов, не принадлежащих ни одной группе
-nouser — поиск файлов без владельцев
-newer — найти файлы новее чем указанный
-size — поиск файлов в Linux по их размеру
Примеры использования
А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.
1. Поиск всех файлов
Показать все файлы в текущей директории:
2. Поиск файлов в определенной папке
Показать все файлы в указанной директории:
Искать файлы по имени в текущей папке:
Не учитывать регистр при поиске по имени:
find . -iname «test*»
3. Ограничение глубины поиска
Поиска файлов по имени в Linux только в этой папке:
find . -maxdepth 1 -name «*.php»
4. Инвертирование шаблона
Найти файлы, которые не соответствуют шаблону:
find . -not -name «test*»
5. Несколько критериев
Поиск командой find в Linux по нескольким критериям, с оператором исключения:
find . -name «test» -not -name «*.php»
Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:
find -name «*.html» -o -name «*.php»
6. Несколько каталогов
Искать в двух каталогах одновременно:
find ./test ./test2 -type f -name «*.c»
7. Поиск скрытых файлов
Найти скрытые файлы:
8. Поиск по разрешениям
Найти файлы с определенной маской прав, например, 0664:
find . type f -perm 0664
Найти файлы с установленным флагом suid/guid:
find / -perm 2644
find / -maxdepth 2 -perm /u=s
Поиск файлов только для чтения:
find /etc -maxdepth 1 -perm /u=r
Найти только исполняемые файлы:
find /bin -maxdepth 2 -perm /a=x
9. Поиск файлов в группах и пользователях
Найти все файлы, принадлежащие пользователю:
find . -user sergiy
Поиск файлов в Linux принадлежащих группе:
find /var/www -group developer
10. Поиск по дате модификации
Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:
Поиск файлов в Linux открытых N дней назад:
Найти все файлы, модифицированные между 50 и 100 дней назад:
find / -mtime +50 –mtime -100
Найти файлы измененные в течении часа:
11. Поиск файлов по размеру
Найти все файлы размером 50 мегабайт:
От пятидесяти до ста мегабайт:
find / -size +50M -size -100M
Найти самые маленькие файлы:
find . -type f -exec ls -s <> \; | sort -n -r | head -5
find . -type f -exec ls -s <> \; | sort -n | head -5
12. Поиск пустых файлов и папок
find /tmp -type f -empty
13. Действия с найденными файлами
Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить ls для получения подробной информации о каждом файле:
Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду grep.