Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.
ОПЦИИ
Давайте рассмотрим самые основные опции утилиты grep, которые помогут нам выполнять поиск текста в файлах:
- Как найти сломанные символические …
- Как найти сломанные символические …
- Символические и жесткие ссылки Linux …
- Как удалить символические ссылки в Linux
- ln. Linux …
- -b — показывать номер блока перед строкой;
- -c — подсчитать количество вхождений шаблона;
- -h — не выводить имя файла в результатах поиска внутри файлов Linux;
- -r — рекурсивный поиск;
- -i — не учитывать регистр;
- — l — отобразить имена файлов, в которых найден шаблон;
- -n — показывать номер строки в файле;
- -s — не показывать сообщения об ошибках;
- -v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
- -w — искать шаблон как слово, окружённое пробелами;
- -e — использовать регулярные выражения при поиске;
- -An — показать вхождение и n строк до него;
- -Bn — показать вхождение и n строк после него;
- -Cn — показать n строк до и после вхождения.
Как найти строку в файлах на линукс?
В этом нам поможет утилита командной строки под названием grep. Она ищет строки, которые отвечают регулярному выражению и выводит их на консоль.
Обратите внимание на следующее
- Используйте скобки, если строка содержит пробелы «текст команды«.
- Помните про пробелы между расширениями {js,java}
- Не используйте фигурные скобки для одного расширения {java} -> java
Ниже представлены наиболее полезные команды, которые я использую в повседневной работе, а также другие работающие команды, найденные на просторах Интернета:
Простой поиск строки в файле
Структура команды: grep строка названиеФайла
Пример использования: grep name
Поиск строки в файле игнорируя чувствительность к регистру
Структура команды: grep строка названиеФайла
Пример использования: grep -i name
Найти строку в текущей директории
Структура команды: grep строка .
Пример использования: grep name .
Найти строку рекурсивно
Структура команды: grep -r строка .
Пример использования: grep -r name .
Найти файлы, которые не содержать определенную строку
Структура команды: grep -L строка *
Пример использования: grep -L «foo» *
Рекурсивно найти строку только в определенных файлах
Структура команды:
grep строка -r . —include=*.расширениеФайла
grep строка -r . —include=*.{расширениеФайла, расширениеФайла2}
Пример использования: grep «name=Main» -r . —include=*.java
Обратите внимание! Эти команды буду искать только в тех файлах, которые вы определили в секции —include=*.{…}
Рекурсивно найти строку кроме определенных расширений
Структура команды: grep строка -r . —exclude=*.{расширениеФайла}
Пример использования: grep «Serializable» -r . —exclude=*.{jar,js,index}
Рекурсивно найти строку в определенных расширениях, исключая указанные
Структура команды:
grep строка -r . —include=*.расширениеФайла —exclude=*.расширениеФайла2
grep строка -r . —include=*.{расширениеФайла,расширениеФайла2} —exclude=*.{расширениеФайла3,расширениеФайла2}
Пример использования: grep «name=Main» -r . —include=*.{java,html} —exclude=*.java
Обратите внимание! Команда выше не будет искать в файлах с расширением .java
Ищите другие полезности в специальном разделе.
Больше полезных статей!
- Читаем XML файл в Java с помощью StAX
- Как преобразовать изображение в массив байтов на Java?
- Android Internal Storage: пример работы с внутренней памятью
- Как изменить XML файл в Java: используем DOM Parser
Действия
Команда find дает вам результаты поиска, а затем возможность выполнить действия над ними. Вот несколько предопределенных действий:
Действие | Описание |
-delete | Удаляет файлы, соответствующие критериям поиска |
-ls | Показывает подробный вывод ls с размерами файлов и количеством inode |
Показывает полный путь к соответствующим файлам. Это действие по умолчанию, если не указано другое действие. | |
-exec | Выполняет следующую команду в каждой строке результатов поиска. |
Итак, если вы хотите найти все пустые файлы и удалить их, вы можете сделать это следующим образом:
$ find . -empty -delete
Внимание: перед использованием действия удаления всегда можно безопасно запустить команду один раз с действием -print и подтвердить результаты.
Действие -exec является особенным. Это позволяет вам выполнить команду по вашему выбору в результатах поиска:
-exec command {} \;
- Как я могу сказать, если папка на самом …
- Что такое символические ссылки в Linux …
- Что такое символические и жесткие ссылки?
- Linux с помощью команды ln
- Что такое символические и жесткие ссылки?
где:
- command — это команда, которую вы хотите выполнить для результатов поиска, например rm, mv или cp.
- {} представляет результаты поиска.
- Команда заканчивается точкой с запятой после обратной косой черты.
Итак, команду поиска и удаления всех пустых файлов можно записать так:
$ find . -empty -exec rm {} \;
Вот еще один пример использования действия -exec. Следующая команда копирует все .png изображения в каталог backup/images:
$ find . -name "*.png" -exec cp {} /backups/images \;
Поиск папки
На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните
# find / -type d -name «*mysql*»
Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:
- b — блочное устройство
- c — символьное устройство
- d — папка (дирректория)
- p — именнованный канал
- f — обычный файл
- l — символическая ссылка
- s — сокет
- D — дверь (только для Solaris)
Подробнее о различных параметрах поиска find вы можете почитать, введя команду
$ man find
Поиск текста в Linux при помощи утилиты grep
Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php…) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.
Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести
# grep -lri root /etc/*
Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt»… Вы поняли
Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите
# grep -lri ^root /etc/*
Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии
Удаление файлов и папок
Обычное удаление файла:
rm /etc/
Если с помощью обычного rm попробовать удалить папку в которой находятся файлы, появится ошибка. Для удаление папок используем другую команду:
rmdir backup
Добавляем атрибут -p для удаление пустых папок по всему пути. Будут удалены все три папки указанные ниже, если они не содержат файлов:
Ошибка папки при удалении в Linux
Иногда при удалении папки в Linux пишется ошибка:
rmdir: не удалось удалить «название_папки»: Нет такого файла или каталога
При этом зайти в неё тоже не удаётся, пишется ровно противоположное:
-bash: cd: /название_папки: Нет такого файла или каталога
Также встречаются ошибки:
rm: невозможно удалить «/home/admin/web/public_html»: Это каталогrmdir: не удалось удалить «/home/admin/web/public_html»: Каталог не пуст
Удалить эту капризную папку (без предупреждений) поможет следующая команда:
- MakeUseOf Объясняет …
- MakeUseOf Объясняет …
- Можно ли редактировать символическую …
- FOSS News №19 – обзор новостей …
- Git Symlinks в Windows – 12 Ответов
или так:
rm -rf /home/admin/web/public_html
где -r – команда пройтись по всем папкам и файлам и попытаться удалить каждую из них -f – удалить без подтверждения
Удалить всё внутри папки
Зайти внутрь папки:
cd folder
Удалить все в этой папке:
Удаление файлов из директории Linux без удаления самой папки
Удаляем всё содержимое из папки files, которая находится по этому пути – /home/user/files/. Специальные ключи в команде ускоряют удаление содержимого с минимальной нагрузкой на сервер.
find /home/user/files/ -mindepth 1 -a -print0 | xargs -n 100 -0 rm -rf
Удалить все файлы кроме одного конкретного файла
rm -v !("")
Удалит все файлы, кроме одного. Эта команда не удаляет папки.