Поиск файлов в Linux (find)
Для поиска файлов применяется команда find
. Рассмотрим работу команды на примере следующего дерева каталогов:
user@debian-server:~/test$ tree
.
├── data
│ ├── data1.dat
│ ├── data2.dat
│ └── readme.txt
├── data.dat
├── file1.txt
└── file2.txt
2 directories, 6 files
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Если запустить find
без параметров то команда рекурсивно выведет все названия файлов и каталогов.
user@debian-server:~/test$ find
.
./file1.txt
./data.dat
./file2.txt
./data
./data/data2.dat
./data/readme.txt
./data/data1.dat
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
С помощью параметров можно указывать фильтры для поиска. Фильтр по имени — параметр -name
.
user@debian-server:~/test$ find -name readme.txt
./data/readme.txt
1
2
2
Можно искать по маске
user@debian-server:~/test$ find -name '*.dat'
./data.dat
./data/data2.dat
./data/data1.dat
1
2
3
4
2
3
4
Можно искать с указанием размера, символ c
означает, единицу измерения — байты.
user@debian-server:~/test$ find -size 6c
./data/data2.dat
user@debian-server:~/test$ ls -l ./data/data2.dat
-rw-r--r-- 1 user user 6 ноя 30 13:38 ./data/data2.dat
1
2
3
4
2
3
4
Так же можно указать тип: файл, директория, ссылка:
user@debian-server:~/test$ find -type f
./file1.txt
./data.dat
./file2.txt
./data/data2.dat
./data/readme.txt
./data/data1.dat
1
2
3
4
5
6
7
2
3
4
5
6
7
С помощью параметра -exec
можно выполнить определенное действие над всеми найденными файлами. После -exec
должна идти команда, в том месте где должно стоять имя файла символы {}
а в конце команды \;
.
user@debian-server:~/test$ find -size 6c -exec file {} \;
./data/data2.dat: ASCII text
1
2
2