Найти


Начало работы

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

``Шелл-скрипт $ find [путь…] [опции] [выражение]


Wildcard
```Шелл-скрипт
$ find . -имя "*.txt"
$ find . -имя "2020*.csv"
$ find . -name "json_*"

Примеры опций

Опция Пример Описание
type find . -type d Найти только каталоги
-name find . -type f -name “*.txt” Найти файл по имени
-iname find . -type f -iname “hello” Найти файл по имени (без учета регистра)
-size find . -size +1G Найти файлы размером более 1G
-user find . -type d -user jack Найти файл пользователя jack
-regex find /var -regex ‘.*/tmp/.*[0-9]*.file’ Использование Regex с find. См. regex
-maxdepth find . -maxdepth 1 -name “a.txt” В текущем каталоге и подкаталогах
-mindepth find / -mindepth 3 -maxdepth 5 -name pass Между подкаталогами 2-го и 4-го уровня
{.show-header}

Тип

-type d Directory
-type f File
-type l Символическая ссылка
-type b Буферизованный блок
-type c Небуферизованный символ
-type p Именованная труба
-type s Socket

Размер

-size b 512-байтовые блоки (по умолчанию)
-size c Байт
-size k Килобайты
-size M Мегабайт
-size G Гигабайт
-size T Terabytes (только BSD)
-size P Petabytes (only BSD)

Размер +/-

Найти все файлы размером более 10 МБ Шелл-скрипт $ find / -size +10M


Найти все файлы размером менее 10 МБ
```Шелл-скрипт
$ find / -size -10M

Найти все файлы размером ровно 10М ``Шелл-скрипт $ find / -size 10M


Найти размер между 100 МБ и 1 ГБ
```Шелл-скрипт
$ find / -size +100M -size -1G

Префиксы + и -, как обычно, означают больше и меньше.

Имена

Поиск файлов по имени в текущем каталоге ``Сценарий командной строки $ find . -name tecmint.txt


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

``Сценарий командной строки
$ find /home -name tecmint.txt

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

$ find /home -iname tecmint.txt

Поиск каталогов по имени ``Шелл-скрипт $ find / -type d -name tecmint


Поиск php-файлов по имени
``Основной скрипт
$ find . -type f -name tecmint.php

Найти все php-файлы в каталоге ``Основной сценарий $ find . -type f -name “*.php”



### Разрешения

Найдите файлы, права доступа к которым равны 777.

``Шелл-скрипт
$ find . -type f -perm 0777 -print

Находит файлы с правами 777.

``Сценарий оболочки $ find / -type f ! -perm 777


Найти файлы набора SUID.

``Сценарий оболочки
$ find / -perm /u=s

Найти файлы набора SGID.

$ find / -perm /g=s

Поиск файлов, доступных только для чтения.

``Шелл-скрипт $ find / -perm /u=r


Поиск исполняемых файлов.

``Шелл-скрипт
$ find / -perm /a=x

Владельцы и группы

Поиск одного файла по пользователю Шелевой сценарий $ find / -user root -name tecmint.txt

Найти все файлы, основанные на пользователе
```Шелл-скрипт
$ find /home -user tecmint

Найти все файлы на основе группы ``шелл-скрипт $ find /home -group developer

Найти конкретные файлы пользователя
```Шелл-скрипт
$ find /home -user tecmint -iname "*.txt"

Множественные имена файлов

$ find . -type f \( -name "*.sh" -o -name "*.txt" \)

Поиск файлов с расширениями .sh и .txt

Множественные каталоги

``Шелл-скрипт {.wrap} $ find /opt /usr /var -name foo.scala -type f

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


### Пустой
``Основной сценарий
$ find . -type d -empty

Удаление всех пустых файлов в каталоге ``Шелл-скрипт $ find . -type f -empty -delete



Поиск даты и времени
-------------


### Средства {.col-span-2}
| Option | Description |
|---------|-----------------------------------------------------------------|
| `atime` | время доступа (последний раз, когда файл <yel>открывался</yel>)|
| `mtime` | время изменения (последний раз файл <yel>содержимое было изменено</yel>) |
| `ctime` | changed time (время последнего изменения файла <yel>inode</yel>) |
#### Пример
| Опция | Описание |
|-----------------|------------------------------------------------------------|
| `-mtime +0` | Изменено более 24 часов назад |
| `-mtime 0` | Изменено от настоящего времени до 1 дня назад |
| | `-mtime -1` | Изменено менее 1 дня назад (так же, как `-mtime 0`) |
| | `-mtime 1` | Изменено от 24 до 48 часов назад |
| `-mtime +1` | Изменено более 48 часов назад |
| `-mtime +1w` | Последнее изменение более 1 недели назад |
| `-atime 0` | Последнее обращение было произведено в период с сегодняшнего дня до 24 часов назад |
| `-atime +0` | Доступ был получен более 24 часов назад |
| `-atime 1` | Доступ был получен от 24 до 48 часов назад |
| `-atime +1` | Доступен более 48 часов назад |
| | `-atime -1` | Доступ получен менее 24 часов назад (то же, что и `-atime 0`) | |
| `-ctime -6h30m` | Статус файла изменился за последние 6 часов и 30 минут |


### Примеры
 Поиск измененных за последние 50 дней файлов
Шелл-скрипт
$ find / -mtime 50

Найти последние 50 дней доступ к файлам ``Шелл-скрипт $ find / -atime 50

 найти измененные файлы за последние 50-100 дней
``Шелл-скрипт
$ find / -mtime +50 -mtime -100

найти измененные файлы за последний 1 час ``Шелл-скрипт $ find / -cmin -60

 найти измененные файлы за последний 1 час
```Шелл-скрипт
$ find / -mmin -60

найти доступные файлы за последний 1 час ``Шелл-скрипт $ find / -amin -60



Найти и {.cols-2}
--------


### Найти и удалить {.row-span-2}

Поиск и удаление нескольких файлов

Шелл-скрипт
$ find . -type f -name "*.mp3" -exec rm -f {} \;

Поиск и удаление одного файла

``Основной сценарий $ find . -type f -name “tecmint.txt” -exec rm -f {} ;



Найти и удалить файлы размером 100 мб
``Шелевой сценарий
$ find / -type f -size +100m -exec rm -f {} \;

Найти определенные файлы и удалить ``Шелл-скрипт $ find / -type f -name *.mp3 -size +10m -exec rm {} ;


### Поиск и замена

Найдите все файлы и измените содержимое `const` на `let`.

``Сценарий оболочки {.wrap}
$ find ./ -type f -exec sed -i 's/const/let/g' {} \;

Найти файлы, доступные для чтения и записи, и изменить содержимое старого на новое

``Сценарий {.wrap} $ find ./ -type f -readable -writable -exec sed -i “s/old/new/g” {} ;

См. также: [sed cheatsheet](/sed)
 

### Найти и переименовать

Поиск и суффикс (добавлен `.bak`)

``Сценарий {.wrap}
$ find . -type f -name 'file*' -exec mv {} {}.bak\;

Найти и переименовать расширение (.html => .gohtml) ``Сценарий оболочки {.wrap} $ find ./ -depth -name “*.html” -exec sh -c ‘mv “$1” “${1%.html}.gohtml”’ _ {} ;


### Найти и переместить
``Сценарий оболочки
$ find . -name '*.mp3' -exec mv {} /tmp/music \;

Найти и переместить в определенный каталог (/tmp/music)

Найти и скопировать

``Шелл-скрипт $ find . -name ‘2020.xml’ -exec cp -r “{}” /tmp/backup ;

Найти подходящие файлы и скопировать их в определенный каталог (`/tmp/backup`)


### Найти и объединить

Объединить все csv-файлы в директории загрузки в файл `merged.csv`.

``Сценарий командной строки
$ find download -type f -iname '*.csv' | xargs cat > merged.csv

Объединить все отсортированные csv-файлы в директории download в файл merged.csv.

``Сценарий {.wrap} $ find download -type f -iname ‘*.csv’ | sort | xargs cat > merged.csv



### Поиск и сортировка

Поиск и сортировка по возрастанию

``Шелл-скрипт
$ find . -type f | sort

поиск и сортировка по убыванию

``Основной сценарий $ find . -type f | sort -r



### Найти и chmod {.row-span-1}

Найти файлы и установить права на 644.

``Шелл-скрипт
$ find / -type f -perm 0777 -print -exec chmod 644 {} \;

Найдите каталоги и установите права доступа на 755.

``Шелевой сценарий $ find / -type d -perm 777 -print -exec chmod 755 {} ;



### Найти и сжать

Найти все файлы `.java` и сжать их в файл `java.tar`.

командный сценарий
$ find . -type f -name "*.java" | xargs tar cvf java.tar

Найти все файлы .csv и сжать их в файл cheatsheets.zip.

``Основной сценарий $ find . -type f -name “*.csv” | xargs zip cheatsheets.zip