Поиск файлов в Linux

find

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

0. Создадим файл размером 10 Мбайт с размером блока 100 Кбайт:

rootoor@srv:~/dd-test$ dd if=/dev/zero of=file1.test bs=100K count=100
100+0 записей считано
100+0 записей написано
скопировано 10240000 байт (10 MB), 0,0448225 c, 228 MB/c

rootoor@srv:~/dd-test$ ls -l
итого 10000
-rw-r--r-- 1 rootoor rootoor 10240000 2013-05-05 13:47 file1.test

rootoor@srv:~/dd-test$

/dev/zero – специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов (ASCII NUL, 0x00)

of=file.test – файл который создаем

bs=100K – размер блока, 100 КБайт (может быть: К — КБайт, М — МБайт, — ГБайт)

count=100 – количество блоков

В результате мы получили заданный файл, размером 100К*100=10 МБ

rootoor@srv:~# dd if=/dev/zero of=/var/www/file1.test bs=1M count=52
52+0 records in
52+0 records out
54525952 bytes (55 MB) copied, 0.453559 s, 120 MB/s

теперь в директории /var/www/ находится файл file1.test размером 52 МБ.

1. Поиск файлов в текущей директории размером больше 10 Мбайт

rootoor@srv:/var/www$ find . -size +10M -print
./var/www/file1.test

find – утилита для поиска файлов

. – где ищем. В нашем случае текущей директории (/var/www/* – поиск в директории /var/www/~ — поиск в домашней директории/ – поиск в корне файловой системы$HOME – поиск в домашней директории )

-size +10M – размер искомого файла. Больше 10 Мбайт (b – блок, размером 512 байт, c – байт, w – слово, размером 2 байта, k – килобайт, M – мегабайт и G– гигабайт )

-print – вывод на экран

2. Поиск файлов больше 50 Мб с выводом детальной информации

Усложним задачу и попробуем вывести на экран кроме имени файла еще некоторую информацию о нем.

rootoor@srv:~# find /var/www/* -type f -size +50000k -exec ls -lh {} \; | awk '{ print $8 " " $5 " " $1 " " $3":"$4 }'

./var/www/test1.file 110M -rw-r--r-- rootoor:rootoor
./var/www/file1.test 52M -rw-r--r-- rootoor:rootoor

-type f – тип, который ищем (f – файл, d – директория, l – символичная ссылка, s – сокет, b – блок)

-exec ls -lh {} \; – выполняет команду ls -lh над найденными файлами (вывод содержимого директории)

awk ‘{ print $8 » » $5 » » $1 » » $3″:»$4 }’ – обрабатываем вывод информации командой ls -lh

и выводим более детальную информацию в нужном нам порядке:
$8 – имя файла
$5 – размер файла
$1 – права доступа
$3 – владелец
$4 – группа

3. Поиск файлов заданного размера и определенного имени

rootoor@srv:~# find $HOME -name w*  -size +1M -exec ls -lh {} \; | awk '{ print $8 " " $5 }'

/home/rootoor/kawabanga.tar.gz 17M

-name w* – любой файл имя, которого содержит w*