Рубрики
find \ grep \ поиск

find / поиск

find:

!!! Внимание при использовании шаблонов рекомендуется шаблон брать в одинарные кавычки 'шаблон'

find где параметр что параметр

find / type -f  -name '*.html' - искать файлы заканчивающиеся на .html

find / -user vasya - поиск файлов принадлежащие пользователю vasya 

find / -type f -name file1 - найти все файлы с именем file1

find /etc -type d | sort - ищет все каталоги, находящиеся в /etc/ и вывод сортируется по имени


atime — время последнего ДОСТУПА к файлу (например, чтение, исполнение). Можно увидеть командой ls -lu
mtime — время последнего изменения файла (его содержимого). Можно увидеть командой ls -l
ctime — время последнего изменения прав доступа или владельца. Можно увидеть командой ls -lc


find /usr/bin -type f -atime +20 - найти все файлы в директории /usr/bin, время последнего обращения к которым более 20 дней
find /usr/bin -type f -mtime +10 - найти все файлы в директории /home, время последнего изменения файла больше 10 дней


find /var/backup/www -name "*.tar.gz" -mtime +30 |xargs /bin/rm -f "{}"; - найти все файлы старше 30 дней и удалить   
find /mnt/datastore1/backup_VM/mail/  -type f -name "*.qcow2.gz" -mtime +30 -delete -  найти все файлы(-type f) с именем (-name "*.qcow2.gz") старше 30 дней и удалить

find / -name *.rpm -exec chmod 755 "{}"\; -  найти все директории и файлы, имена которых оканчиваются на ".rpm", и изменить им права на "755"
find /dir -name *.bra -exec chown www.www "{}"\; -  найти все директории и файлы, имена которых оканчиваются на ".bra", и изменить владельца и группу на www

find /zzzz/gallery/ -type f  -name *_backup -delete - найти файлы в имени которых (окончание *_backup) и удалить их (внутри папок тоже удалит)
find /zzzz/gallery/ -type d  -name dir_name -delete - найти директории с именем (dir_name) и удалить их (удалит только пустые директории)

find /dir/dir/ -type d -name "моя_папка" -exec rm -rf "{}"\; - найти все директории с именем "моя_папка" и удалить папки с файлами
 
whereis ls - найти все фалы и директории, м именем ls
which ls - вывести полный путь до файла ls
locate \*.ps - ищем файлы *.ps

Поиск файлов по имени:

find . -name file.txt -print - просмотреть дерево каталогов, начиная с текущего, и найти file.txt

find понимает служебные символы. 
Не забудьте заключить строку, содержащую их, в кавычки, иначе shell будет пытаться 
транслировать их прежде, чем они будут переданы программе find.
find . -name "file*" -print - просмотреть дерево каталогов, начиная с текущего, и найти file

Если Вы ищете в большом дереве каталогов, команда find может работать довольно медленно. 
Иногда удобнее использовать команду locate. 
Она не ищет файл непосредственно в файловой системе, а просматривает свою базу данных. 
Такой метод намного быстрее, но база данных может устареть. 
В некоторых дистрибутивах эта база модифицируется каждую ночь. 
updatedb - чтобы модифицировать базу сейчас
locate file - ищем файл в базе

Имя файла может быть не lostfile.txt, а lastfile.txt или leastfile.txt 
или lostfiles.txt или Lotsfile.txt или lostfile.text, и Вы не помните имя точно. 
Как теперь найти файл? В такой ситуации очень полезна «fault tolerant file find utility» 
(толерантная к ошибкам утилита поиска файлов), ftff. 
ftff разрешает сделать несколько «орфографических ошибок» в имени файла при поиске. 
ftff lostfiles.txt - эта команда нашла бы все вышеперечисленные файлы
ftff -t2 "lostfiles*" - ищем, разрешить максимум 2 ошибки (опция t2) и использовать служебный символ 

find, fgrep, egrep:

Иногда необходимо найти все файлы в дереве, имя которых не содержит некоторую строку. 
Например, все файлы за исключением .o и .c.

find . ! -name "*.o" ! -name "*.c" -print 
find . -print | fgrep -v '.o' | fgrep -v '.c'
если у Вас gnu версия find:
find | fgrep -v '.o' | fgrep -v '.c'
find | egrep -v '\.[oc]' 

Обзор дерева каталогов:

tree - отображает дерево каталогов в виде диаграммы
tree -fF - отображает дерево каталогов в виде диаграммы с длинными именами файлов

find . -ls
find . -print или для gnu find:
find . -printf "%7s %p\n"

Стандартные утилиты для поиска текстовых строк в файлах:

grep/egrep - для обычных поисков выражения
fgrep - для поиска литеральных строк
egrep -i "search expression" *
egrep -i "expression" `find . -type f -print` - чтобы искать строки во всех файлах дерева каталогов
find . -type f -exec egrep -i "exp" /dev/null {} \; - чтобы искать строки во всех файлах  каталогов
find . -type f -print | xargs  egrep -i "exp"  - чтобы искать строки во всех файлах дерева каталогов
agrep -i -2 "search exp" * - чтобы искать выражение и разрешить максимум 2 орфографические ошибки

find + rm:

Следующая команда удаляет все резервные копии, содержащиеся в данном каталоге и во всех подкаталогах. 
При этом find строит список всех сомнительных файлов и передает его команде rm через подстановку команды ($(команда)).

rm $(find .  -name '*-')