Find

  1. Поиск по имени — name, iname

    name — чувствителен к регистру
    iname — нечувствителен к регистру

    find /home -name "Test.txt"

    find /home -iname "Test.txt"

    Не выводить ошибки доступа при поиске - 2>/dev/null

    find /home -name "*.jpg" 2>/dev/null

  2. Поиск по типу файла — type

    f – простые файлы;
    d – каталоги;
    l – символические ссылки;
    b – блочные устройства (dev);
    c – символьные устройства (dev);
    p – именованные каналы;
    s – сокеты;

    find /home -type f -iname openssl

  3. Поиск по размеру файла — size

    «+» — Поиск файлов больше заданного размера
    «-» — Поиск файлов меньше заданного размера

    Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.
    c — Байт
    k — Кбайт
    M — Мбайт
    G — Гбайт

    Отобразить все файлы, размером более 2 Гб (+2G).

    find . -size +2G

  4. Поиск пустых файлов и каталогов -empty

    find . -empty

  5. Поиск времени изменения -cmin, -mtime

    mtime – время последнего изменения файла
    ctime – время создания файла
    atime – время последнего доступа к файлу

    Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:

    find . -cmin -60

    Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60.

    find . -cmin +60

  6. Действия -exec, -delete

    К команде find можно добавить действия, которые будут произведены с результатами поиска.


    -delete — Удаляет соответствующие результатам поиска файлы
    -ls — Вывод более подробных результатов поиска с:
    Размерами файлов.
    Количеством inode.
    -print Стоит по умолчанию, если не указать другое действие. Показывает полный путь к найденным файлам.
    -exec Выполняет указанную команду в каждой строке результатов поиска.
    -exec command {} \;
    command – это команда, которую вы желаете выполнить для результатов поиска. Например:
    rm
    mv
    cp
    {} – является результатами поиска.
    \; — Команда заканчивается точкой с запятой после обратного слеша.

    find . -empty -exec rm {} \;

    find . -name "*.jpg" -exec cp {} /backup \;


    Если вместо exec использовать ok, то будет просить подтверждение действия

    Примеры

    find / -type f -exec du -sh {} 2>/dev/null + | sort -rh | head -n 10

    Скопировать файлы, созданные за последние 30 дней

    cp $(find . -mtime -30) /mnt/disk2/Scan2017/old

    Вывести только имена файлов.

    Поиск файлов пойдёт рекурсивно от той директории, где будет запущена команда:

    find | awk -F '/' '{print $NF;}'

    Переименовать все найденные файлы:

    find /backup/sql -type f -name "*.sql.gz" -exec mv {} {}.old \;

    Переместить найденные по маске файлы из одной директории в другую:

    find /mnt/backup/*site.ru* -type f -exec mv {} /web/sites/ \;

    Найти файлы в определённом временном интервале:

    find /mnt/zz_archive -type f -newermt '2022-01-01 00:01' ! -newermt '2022-01-31 23:59'

    Cортировка по дате изменения:

    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