Начало работы
Использование
``Шелл-скрипт $ find [путь…] [опции] [выражение]
Wildcard
```Шелл-скрипт
$ find . -имя "*.txt"
$ find . -имя "2020*.csv"
$ find . -name "json_*"
- Regex reference (cheatsheets.zip)
- Find cheatsheet (gist.github.com)
Примеры опций
Опция | Пример | Описание |
---|---|---|
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