Здесь показаны различия между двумя версиями данной страницы.
linux:command-find [2019/07/24 21:31] |
linux:command-find [2022/02/01 21:30] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Поиск ===== | ||
+ | <code bash> | ||
+ | $ find ~ -name WWW | ||
+ | find: `/home/alexander/.cache/dconf': Permission denied | ||
+ | /home/alexander/VirtualBox VMs/WWW | ||
+ | </code> | ||
+ | Код и вывод команды find - поиск файлов в каталоге. В данном примере ищется каталог WWW в домашней папке пользователя\\ | ||
+ | <code bash>find ~/WWW/dokuwiki/www/data/*</code> | ||
+ | Найти все файлы в папке ~/WWW/dokuwiki/www/data/\\ | ||
+ | <code bash>find / -nouser</code> | ||
+ | Найти все файлы, которые не принадлежат ни одному пользователю. | ||
+ | ==== Найти файлы, которые изменены в диапазоне дат ==== | ||
+ | <code bash> | ||
+ | find ~/WWW/mfn-dev/ -type f -newermt '2020-12-01 00:00:00' ! -newermt '2020-12-14 23:59:59' | ||
+ | </code> | ||
+ | ==== Поиск и сортировка ===== | ||
+ | <code bash>find /home/alexander/WWW/dokuwiki/www/data/ -name '*.txt' -exec ls -d --full-time "{}" \; | sort -nk 6</code> | ||
+ | Найти все файлы *.txt в каталоге /home/alexander/WWW/dokuwiki/www/data/ и вывести их, отсортировав по времени изменения, от большего к меньшему (если sort -k -- то сортировка от меньшего к большему)\\ | ||
+ | В отличие от ls | sort, данная конструкция найдет файлы не только в /home/alexander/WWW/dokuwiki/www/data/ - но и во вложенных каталогах | ||
+ | <code bash>find /home/alexander/WWW/dokuwiki/www/data/ \( -name '*.txt' -or -name '*.jpg' \) -exec ls -d --full-time "{}" \; | sort -nk 6</code> | ||
+ | Работает как в предыдущем примере, но ищет файлы, подпадающие под *txt или *.jpg | ||
+ | <code bash>find /home/alexander/WWW/dokuwiki/www/data/ \( -name '*.txt' -or -name '*.jpg' \) -exec ls -d --full-time "{}" \; | sort -nk 6 | head -1</code> | ||
+ | Работает как в предыдущем примере, но выводит только первую строку из вывода | ||
+ | <code bash>$ find /home/alexander/WWW/dokuwiki/www/data/ \( -name '*.txt' -or -name '*.jpg' \) \( ! -regex '.*/cache.*' \) -type f -printf "%T@ %p\n" | sort -n -r | head -1 | ||
+ | </code> | ||
+ | Найти все файлы в папке ~/WWW/dokuwiki/www/data/, исключив из поиска /WWW/dokuwiki/www/data/cache и выведя первую строку вывода (расширение предыдущего примера) | ||
+ | <code bash> | ||
+ | find /dirmane -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}' | ||
+ | </code> | ||
+ | Найти самые большие файлы в каталоге, и вывести первые 10 файлов с максимальным размером. | ||
+ | <code bash> | ||
+ | find ~/123 -mount -type f -ls 2> /dev/null | sort -rnk7 | head -30 | awk '{printf "%s\n",$11,$NF}' | ||
+ | </code> | ||
+ | Найти и вывести первые 30 самых больших файлов. (без указания размера) | ||
+ | ==== Поиск и выполнение действий ==== | ||
+ | <code bash> | ||
+ | $ find ~/WWW/tervenichi/www/images/0_ST* -exec rm -f {} \; | ||
+ | </code> | ||
+ | В данном примере ищется файл по маске ~/WWW/tervenichi/www/images/0_ST* и для каждого найденного вызывается rm -f {}, где вместо {} подставялется найденное имя файла. | ||
+ | ==== Поиск файлов определенного размера ==== | ||
+ | Опция -size позволяет произвести поиск файлов определенного размера и имеет следующий вид при выполнении: | ||
+ | <code bash> | ||
+ | $ find /dirname -size 2000k -print | ||
+ | </code> | ||
+ | Вышеуказанная команда отыщет и отобразит на экране файлы размером 2 мегабайта, находящийся в текущем каталоге. Если, к примеру, необходимо найти файлы размером менее 500 килобайт, то вид команды будет следующий: | ||
+ | <code bash> | ||
+ | $ find /dirname -size -500k -print | ||
+ | </code> | ||
+ | Если нужно найти файлы размером более 600 мегабайт, то применим команду: | ||
+ | <code bash> | ||
+ | $ find /dirname -size +600M -print | ||
+ | </code> | ||
+ | Еще пример. Найти и скопировать файлы, размер которых превышает 1 Мб: | ||
+ | <code bash> | ||
+ | find /sourcedir -size +1M -print -exec cp {} /destdir \; | ||
+ | </code> | ||
+ | Найти и вывести все файлы старше 5 дней: | ||
+ | <code bash> | ||
+ | find /home/alex/YandexDisk/alex/Backups/* -mtime +5 -print | ||
+ | </code> | ||
+ | ==== Смотри также ==== | ||
+ | * [[:linux:command-locate|Поиск файлов по базе (locate)]] | ||
+ | * [[:linux:command-chmod-mass|Массовое рекурсивное изменение прав доступа в Linux (find && chmod)]] | ||
+ | * [[linux:command-mass-rename|Массовое переименование (простое) find & mv]] | ||
+ | * [[linux:command-find-and-delete|Linux: удалить файлы по маске]] | ||
+ | ==== Ссылки ==== | ||
+ | * http://www.opennet.ru/docs/RUS/linux_base/node149.html - много дельных примеров с find | ||
+ | * http://linux-freebsd.ru/linux/konsolnie-komandyi-v-linux/komanda-find-v-linux-freebsd-sintaksis-komandyi-find/ - примеры find, есть примеры поиска по нескольким шаблонам имеен файлов | ||
+ | * http://ru.clihelper.com/find/ - генератор find |