Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>shell find commands bin}} ====== find - Поиск файлов с реальном сканированием. ====== Команда find выполняет просмотр файловой системы для поиска файла, что делает этот инструмент медленным, но эффективным. Для поиска по имени обязательно нужно указывать ключ -name Пример: <code bash> find -name filename.txt</code> По умолчанию find производит поиск рекурсивно в текущем каталоге. ^ Описание опций ^ ^ | Опция | Описание | | -name | Поиск по имени. | | -iname | Регистронезависимый поиск по имени. | | -type | Тип объекта поиска. Возможные варианты: f — файл; d — каталог; l — ссылка; p — pipe; s — сокет. | | -size | Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»). | | -mtime | Время изменения файла. Указывается в днях. | | -mmin | Время изменения в минутах. | | -atime | Время последнего обращения к объекту в днях. | | -amin | Время последнего обращения в минутах. | | -ctime | Последнее изменение владельца или прав на объект в днях. | | -cmin | Последнее изменение владельца или прав в минутах. | | -user | Поиск по владельцу. | | -group | По группе. | | -perm | С определенными правами доступа. | | -depth | Поиск должен начаться не с корня, а с самого глубоко вложенного каталога. | | -maxdepth | Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный. | | -prune | Исключение перечисленных каталогов. | | -mount | Не переходить в другие файловые системы. | | -regex | По имени с регулярным выражением. | | -regextype <тип> | Тип регулярного выражения. | | -L или -follow | Показывает содержимое символьных ссылок (симлинк). | | -empty | Искать пустые каталоги. | | -delete | Удалить найденное. | | -ls | Вывод как ls -dgils | | -print | Показать найденное. | | -print0 | Путь к найденным объектам. | | -exec <команда> {} \; | Выполнить команду над найденным. | | -ok | Выдать запрос перед выполнением -exec. | | | | | Также доступны логические операторы: | | | Оператор | Описание | | -a | Логическое И. Объединяем несколько критериев поиска. | | -o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. | | -not или ! | Логическое НЕ. Инвертирует критерий поиска. | ===== type / типы ===== * -type f * -type d ===== Параметры ===== * В параметре поставляет найденные значения -exec <code>{}</code> * Пример: <code>find ./ -name "*.php" -exec rm {} \;</code> ====== Смена кодировки у множества файлов ====== <code bash> for i in *; do iconv -f windows-1251 -t utf-8 "$i" >tmp; mv tmp "$i"; done find . \( -name '*.php' -o -name '*.inc' \) -print or find . -name '*.php' -o -name '*.inc' find . -name "*.php" | while read i; do iconv -f windows-1251 -t utf-8 "$i" >tmp; mv tmp "$i"; done find . -name "*.php" -o -name "*.inc" -o -name "*.module" | while read i; do iconv -f windows-1251 -t utf-8 "$i" >tmp; mv tmp "$i"; done </code> ====== Смена прав у файлов и каталогов ====== ===== Смена прав у каталогов ===== <code bash> find . -type d -exec chmod 755 {} \;</code> Эта команда рекурсивно пройдется по текущему (точка ".") каталогу и всем его подкаталогам и изменит права на 755 только у каталогов (-type d) <code bash> find . -type f -exec chmod 644 {} \;</code> всем файлам - 644 ===== Смена прав у файлов ===== <code bash> find . -type f -name '*.htm*' -exec chmod 644 {} \;</code> Определенным файлам ====== Рекурсивное удаление по маске ====== Пример рекурсивного удаления всех git репозиториев <code bash> find . -type d -name '.git' -exec rm -R -f {} \;</code> ====== Поиск необходимого контента в файлах ====== <code bash> find ./ -type f -print -name *.php -exec grep 'eval' --color=auto {} \;</code> Поиск бэкдоров или вирусов на сайте ====== Вычислить размер папки, без подпапок ====== <code bash> find . -maxdepth 0 -type d -mindepth 0 -exec du -hs {} \;</code> ====== Удалить большое количество файлов ====== Иногда при удление файлов командой rm, возникает сообщение об ошибке "/bin/rm: Argument list too long." Ниже след команда позволит ее избежать <code bash> find . -type f -name "thumb_*" -print | xargs rm find ./ -type f -name "thumb_*" -exec rm -f {} \; find . -maxdepth 1 -name 'thumb_*' -exec rm -f {} \; find . -maxdepth 1 -name '*.js' -exec rm -f {} \; find . -type f -name '*.gz' -exec rm -R -f {} \;</code> ====== Удалить файлы созданные позднее 3 дней ====== <code bash> find /tmp -mtime +3 -name 'tmp-*' -exec rm -Rf -- {} \;</code> ====== Поиск каталога ====== <code bash> find / -type d -name "basic"</code> ====== Замена таба на 4 пробела ====== <code bash> find . -type f -exec sed -i.orig 's/\t/ /g' {} +</code> ====== Отображение всех путей вложенных папок ====== <code bash> $ export FINDPATH="/var/lib" $ DEPTH=$(( $(find $FINDPATH -type d | sed 's|[^/]||g' | sort | tail -n1 | egrep -i -o / | wc -l) - $(echo $FINDPATH | sed 's|[^/]||g' | sort | tail -n1 | egrep -i -o / | wc -l) )) $ find $FINDPATH -mindepth $DEPTH -maxdepth $DEPTH -type d </code>СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal