Использование find Linux

find - это мощный инструмент для поиска файлов по различным критериям.

    find

    Синтаксис:
    find [папка] [параметры] критерий шаблон [действие]
    или
    find где_искать опции название

    Основные параметры и критерии команды find

    -P - не открывать символические ссылки
    -L - информацию о файлах по симлинку
    -maxdepth - глубина поиска в каталогах, по умолчанию поиск рекурсивный
    -depth - искать в самом глубоком каталоге
    -mount искать файлы только в этой файловой системе
    -print - выводить полные имена файлов
    -type f - искать только файлы
    -type d - поиск только каталогов
    -name - поиск по имени
    -perm - поиск по режиму доступа
    -user - поиск по владельцу
    -group - поиск по группе
    -mtime - поиск по времени модификации, указывается в днях
    -mmin - поиск по времени модификации в минутах
    -atime - поиск файлов по дате последнего чтения ( обращения к файлу )
    -amin - поиск по дате последнего чтения в минутах
    -ctime - последнее изменение владельца и прав в днях
    -cmin - последнее изменение владельца и прав в минутах
    -user - поиск по владельцу
    -group - поиск по группе
    -perm - поиск по определенных правам доступа
    -empty - искать пустые каталоги
    -prune - исключать из поиска перечисленные каталоги
    -nogroup - поиск файлов, не принадлежащих ни одной группе
    -nouser - поиск файлов без владельцев
    -newer - найти файлы новее чем указанный
    -size - поиск по размеру
    -delete - удалить найденное
    -ls - вывод как ls
    -print - показать найденное
    -print0 - путь к найденным файлам
    -exec - выполнить команду над найденным файлом -exec команда {} \;
    -ok - выдать запрос перед выполнением exec

    #Показать все файлы ( каталоги в том числе ) в текущем каталоге find . -maxdepth 1 #Найти файлы которые не соответствуют шаблону find . -maxdepth 1 -not -name "folder*" #Поиск файла по началу имени find ./ -iname "copy*" #Поиск файла, который начинается на 'copy' и заканчивается расширением '.txt' find ./ -iname "copy*" -a -name "*.txt" #Поиск файлов, которые начинаются на 'copy' или заканчиваются расширением '.txt' find ./ -iname "copy*" -o -name "*.txt" #Поиск файлов, которые не начинаются на 'copy' и имеют расширение txt find ./ -not -iname "copy*" -a -name "*.txt" #Найти только файлы find ./ -type f -iname "copy*" #Искать сразу в двух каталогах find ./Загрузки/ ./Документы/ -type f -iname "linux*" #Поиск скрытых файлов или директорий в текущем каталоге find . -maxdepth 1 -type f -name ".*" #Поиск пустых файлов и папок find /tmp -type f -empty find /tmp -type d -empty #Найти файлы, которые изменялись 60 дней назад find ./ -maxdepth 1 -type f -mtime +60 #Файлы которые изменялись в течении последних 20 мин find bash_scripts/ -mmin -20 -type f #Файлы которые изменялись 20 мин назад, не позже find bash_scripts/ -mmin +20 -type f #Файлы которые изменялись в течении двух дней, 20 минут назад find bash_scripts/ -mtime -2 -mmin +20 -type f #Файлы которые изменились начиная с указанной даты find bash_scripts/ -type f -newermt "2023-01-02 00:00" #Файлы которые изменились между двумя датами, не учитывая последнюю дату find bash_scripts/ -type f -newermt "2023-01-01 00:00" ! -newermt "2023-01-02 00:00" #Файлы к которым обращались начиная с указанной даты find bash_scripts/ -type f -newerat "2023-01-02 00:00" #Файлы которые были созданы 1 января find bash_scripts/ -type f -newerct "2023-01-01 00:00" ! -newerct "2023-01-02 00:01" #Поиск по правам доступа find / -perm 0765 #Поиск файла, владелец которого имеет флаг Suid, можно использовать других пользователей, только чтение и запись, чередовать с отрицанием find /usr -type f -perm /u=s #Файлы принадлежащие определенному пользователю или группе find . -user sergiy find /var/www -group www #Файлы размер которых 50 М find / -size 50M #Файлы размер которых от 50 до 100 М find / -size +50M -size -100M #Действия над найденными файлами find . -empty -exec ls -ld {} \; #Удалить найденные файлы find /tmp -type f -name "*.txt" -exec rm -f {} \; #Удалить файлы больше 100М find /home/bob/dir -type f -name *.log -size +100M -exec rm -f {} \; #Поиск по содержимому find / -type f -exec grep -i -H "content" {} \; #Сортировка по дате модификации find /data -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r #Самый последний модифицированный файл find /data -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -n 1 #Переименовать найденные файлы find . -name "sess_*" -type f -exec mv {} new_name \; find . -name "sess_*" -type f | xargs -I '{}' mv {} new_name #Переместить найденные файлы find . -name "sess_*" -type f -exec mv {} /new/path/ \; #Изменить права для найденных файлов find /home/user/* -type d -exec chmod 2700 {} \; #Сделать замену в найденном файле find /opt/project -type f -exec sed -i -e "s/test/production/g" {} \;
    Примечание

    Программа find обычно используется для поиска файлов и каталогов, но без каких-либо опций она покажет вам список всех файлов, каталогов и подкаталогов вашего текущего каталога


    Операторы

    -a - логическое И
    -o - логическое ИЛИ
    -not или ! - логическое НЕ

    pathname

    {}\; - полное имя файла, используется с командами, например find

    sudo find ./ -iname test.sql -exec ls -la {} \;
    find, xargs, exec

    #!/bin/bash BACKUPFILE=backup archive=${1:-$BACKUPFILE} # tar cvf - `find .. -mtime -1 -type f -print` > $archive.tar #Способ 2 find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar" #Способ 3 find . -mtime -1 -type f -exec tar rvf "$archive.tar" '{}' \; #Разбор #найти файлы, которые изменялись за последние сутки #архивировать их в архив #Дефис в оболочке Linux обычно означает, что входные данные будут приниматься из stdin, а не из именованного файла. #print выводит результат в стандартный вывод #print0 разделяет имена файлов байтом 0 ( null ), чтобы имена содержащие пробелы или символы перевода строки были правильно интерретированы #-exec выполняет команду для каждого найденого файла #xargs выполняет команду для каждой найденной строки #Если xargs запускается с параметром -0 , он будет ожидать строки, разделенные нулем, в качестве выходных данных с помощью find ... -print0 #Преимущество xargs в том, что он может группировать строки вместе, так что он выполняет команду только один или два раза вместо n раз #Пример 1 #find directory -name '*.txt' -exec ls -l {} + #Пример 2 #find directory -name '*.txt' | xargs ls -l #Для полезного чтения статьи по теме: #https://shapeshed.com/unix-find/ #https://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/ exit 0 #Пример, удалить все файлы в каталоге, к которым не было обращений в течении последних 5 дней find ./ -type f -atime +5 -exec rm {} \; #Поиск всех строк с ip-адресами в /etc sudo find /etc -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \;

    Для каждого найденного файла выполняется COMMAND, командная строка должна завершаться последовательностью \;, где сивол ";" экранирован слэшем
    Если COMMAND содержит {}, то find подставляет полное имя найденного файла вместо "{}"


    Источники
    Последнее изменение: 07.10.2024 15:12


    Связанные темы

    Команда exec linux

    Удаление файлов из bash linux с возможностью восстановления

    Использование команды tee в Linux

    Поиск уязвимостей и следов взлома в Linux

    Монтирование в linux

    Язык shell в Linux

    Библиотеки Linux

    Использование md5sum

    Использование wget и curl в Linux

    Команда chattr и lsattr в Linux

    Использование awk Linux Alpine

    Использование sed в Linux

    Применение getopt в Linux

    Переменные окружения в Linux

    Блокировка пользователя в Linux

    Классы символов в Linux

    Использование tar в Linux

    Подстановка имен файлов

    Проверка на необходимость перезапуска после обновления пакетов

    Стандартные потоки и перенаправление ввода/вывода в Linux

    Функции в языке Shell

    Использование grep в Linux

    Архивирование и сжатие файлов в Linux

    Права пользователей и групп

    Полезные команды и скрипты Linux

    Переменные в Linux

    Условная конструкция if в Linux

    Использование grep в Linux

    Использование xargs в Linux

    Фигурные скобки в bash

    Циклы в языке shell

    Использование оператора select в языке shell

    Внутренние и внешние команды linux

    Использование конструкции case в Linux

    Подстановка команд в Linux

    Мониторинг системы Linix с помощью getconf

    Использование ANCI последовательностей в Linux

    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ