find:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
!!! Внимание при использовании шаблонов рекомендуется шаблон брать в одинарные кавычки 'шаблон' 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 |
Поиск файлов по имени:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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:
1 2 3 4 5 6 7 8 |
Иногда необходимо найти все файлы в дереве, имя которых не содержит некоторую строку. Например, все файлы за исключением .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]' |
Обзор дерева каталогов:
1 2 3 4 5 6 |
tree - отображает дерево каталогов в виде диаграммы tree -fF - отображает дерево каталогов в виде диаграммы с длинными именами файлов find . -ls find . -print или для gnu find: find . -printf "%7s %p\n" |
Стандартные утилиты для поиска текстовых строк в файлах:
1 2 3 4 5 6 7 |
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:
1 2 3 4 |
Следующая команда удаляет все резервные копии, содержащиеся в данном каталоге и во всех подкаталогах. При этом find строит список всех сомнительных файлов и передает его команде rm через подстановку команды ($(команда)). rm $(find . -name '*-') |