Поиск папки linux grep

Содержание
  1. Как выполнить поиск файлов и папок в Linux
  2. Поиск файла по имени при помощи утилиты locate
  3. Поиск в Linux при помощи утилиты find
  4. Поиск файла по имени
  5. Поиск файла по дате
  6. Поиск файла по размеру
  7. Поиск папки
  8. Поиск текста в Linux при помощи утилиты grep
  9. Grep In a Directory
  10. [#grep-current-directory][.inline-code]grep[.inline-code] search current directory[#grep-current-directory]
  11. [#grep-current-directory-and-subdirectories][.inline-code]grep[.inline-code] search current directory and subdirectories[#grep-current-directory-and-subdirectories]
  12. [#grep-r-vs-R][.inline-code]grep -r[.inline-code] is different from [.inline-code]grep -R[.inline-code][#grep-r-vs-R]
  13. [#grep-specific-directory][.inline-code]grep[.inline-code] search specific directory[#grep-specific-directory]
  14. [#grep-multiple-files][.inline-code]grep[.inline-code] across multiple files[#grep-multiple-files]
  15. [#grep-all-files][.inline-code]grep[.inline-code] search all files[#grep-all-files]
  16. [#grep-modifiers-multiple-files]Modifiers to the [.inline-code]grep[.inline-code] command across multiple files[#grep-modifiers-multiple-files]
  17. [#grep-exclude-directories][.inline-code]grep[.inline-code] exclude directories[#grep-exclude-directories]
  18. [#grep-counting-multiple-files][.inline-code]grep[.inline-code] counting across multiple files[#grep-counting-multiple-files]
  19. [#grep-ignore-case][.inline-code]grep[.inline-code] ignore case[#grep-ignore-case]
  20. [#grep-return-line-number][.inline-code]grep[.inline-code] return line number[#grep-return-line-number]
  21. [#grep-show-file-name][.inline-code]grep[.inline-code] show file name[#grep-show-file-name]
  22. [#more-on-grep]Find out more about [.inline-code]grep[.inline-code][#more-on-grep]

Как выполнить поиск файлов и папок в Linux

В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.

Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.

Поиск файла по имени при помощи утилиты locate

Чтобы выполнить просто поиск файла по имени в Linux логичнее использовать команду locate — за счет заранее подготовленной базы она быстро выдаст нужный результат:

Если же вы получили сообщение о том, что команда не найдена, возможно её нужно установить. Для Debian-based дистрибутивов (Ubuntu, Mint) установить её можно командой:

Пользователям RedHat, CentOS и Fedora стоит выполнить

После установки нужно создать/обновить базу данных — файл, содержащий в себе «снимок» файловой системы, благодаря которому locate работает так быстро:

Т.е. вместо того, чтобы каждый раз проходиться по всей файловой системе, locate доверяет updatedb создать файл, содержащий в себе все имена и пути файловой системы, и выполняет поиск в нем. Важно поддерживать его актуальность, иначе вы можете случайно найти уже давно удаленные файлы, или не найти новые. Поэтому updatedb при инсталляции «вешается» на CRON и выполняется автоматически — вы можете в этом убедиться, посмотрев на файлы заданий CRON.

Читайте также:  Lubuntu linux live cd

Поиск в Linux при помощи утилиты find

Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:

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

Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:

Учтите, что в данном случае поиск будет идти по имени файла в точности соответствующему заданному. Чтобы сымитировать поведение команды locate для find следует ввести:

«*» означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:

Поиск файла по дате

Вот пример того, как можно выполнить поиск в Linux файла по дате:

Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.

Поиск файла по размеру

А так, например, можно выполнит поиск файлов по размеру:

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

Поиск папки

На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните

Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:

  • b — блочное устройство
  • c — символьное устройство
  • d — папка (дирректория)
  • p — именнованный канал
  • f — обычный файл
  • l — символическая ссылка
  • s — сокет
  • D — дверь (только для Solaris)

Подробнее о различных параметрах поиска find вы можете почитать, введя команду

Поиск текста в Linux при помощи утилиты grep

Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php. ) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.

Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести

Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt». Вы поняли

Читайте также:  Монтировать сетевую папку линукс

Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите

Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии

Источник

Grep In a Directory

[#grep-current-directory][.inline-code]grep[.inline-code] search current directory[#grep-current-directory]

When you want to search in all the files of the current directory, regardless of their name or extension, you can use the wildcard character after your [.inline-code]grep[.inline-code] command as follows:

Note that this command does not search in subdirectories. Instead, it tells you that [.inline-code]model1[.inline-code] and [.inline-code]model2[.inline-code] are directories and that they are not searched.

[#grep-current-directory-and-subdirectories][.inline-code]grep[.inline-code] search current directory and subdirectories[#grep-current-directory-and-subdirectories]

To search within the current directory and all subdirectories, you can use the recursive [.inline-code]-r[.inline-code] flag as follows:

As you can see, instead of stating that [.inline-code]model1[.inline-code] and [.inline-code]model2[.inline-code] are subdirectories, they have been searched and two results have appeared in files within each.

[#grep-r-vs-R][.inline-code]grep -r[.inline-code] is different from [.inline-code]grep -R[.inline-code][#grep-r-vs-R]

Note that the [.inline-code]-r[.inline-code] flag is slightly different from the [.inline-code]-R[.inline-code] flag. While [.inline-code]-r[.inline-code] searches all files that are present in the current directory and all subdirectories, [.inline-code]-R[.inline-code] will also follow symbolic links to go to the original file.

[#grep-specific-directory][.inline-code]grep[.inline-code] search specific directory[#grep-specific-directory]

If you want to recursively search a specific directory instead of the current one, you can replace the wildcard character with the name of the directory you want to search:

[#grep-multiple-files][.inline-code]grep[.inline-code] across multiple files[#grep-multiple-files]

If you are wanting to match a search string across multiple files that you know the name of, the [.inline-code]grep[.inline-code] command takes the form:

After the string you want to match, you specify the individual files separated by a space character.

If you don’t know the actual file names but instead you know the file extension, you can use the wildcard character ([.inline-code]*[.inline-code]) to specify all files with the given extension. This command would take the form:

Which searchers all files in the current directory with the given file extension. Note that this could also be used to search all files with the same name but different extensions by changing where the wildcard character appears.

Читайте также:  Linux mint share files

[#grep-all-files][.inline-code]grep[.inline-code] search all files[#grep-all-files]

To search all files, you can run the commands identified above but from the root of your system. This is not recommended as you would get the results from folders that aren’t relevant to your search, such as your configuration settings. Instead, navigate to the root of where would be useful to search, such as [.inline-code]/home[.inline-code] or [.inline-code]/usr[.inline-code] or [.inline-code]/etc[.inline-code] and then run the grep command with the recursive search flag ([.inline-code]-r[.inline-code]).

[#grep-modifiers-multiple-files]Modifiers to the [.inline-code]grep[.inline-code] command across multiple files[#grep-modifiers-multiple-files]

[#grep-exclude-directories][.inline-code]grep[.inline-code] exclude directories[#grep-exclude-directories]

In some cases you may want to exclude certain directories from your search. In this case you add the [.inline-code]—exclude-dir[.inline-code] flag to the command:

This can also be modified to take a list of directories by replacing [.inline-code]dir[.inline-code] with [.inline-code][.inline-code].

[#grep-counting-multiple-files][.inline-code]grep[.inline-code] counting across multiple files[#grep-counting-multiple-files]

To match across multiple files and count the occurrences of the pattern you are searching for, you can use the following command, which will print out the occurrences as well as the file they appear in:

 $ grep -0 “string”  | cut -d ‘:’ -f 1 | uniq -c

[#grep-ignore-case][.inline-code]grep[.inline-code] ignore case[#grep-ignore-case]

The [.inline-code]grep[.inline-code] command is case sensitive. To ignore the case you can use the [.inline-code]-i[.inline-code] flag. For example, when searching for the [.inline-code]hello[.inline-code] string, the [.inline-code]grep[.inline-code] command will also match [.inline-code]Hello[.inline-code] and [.inline-code]hellO[.inline-code] within a file.

[#grep-return-line-number][.inline-code]grep[.inline-code] return line number[#grep-return-line-number]

When matching across multiple files you might want to print off the line number along with the output. In that case you can add the [.inline-code]-n[.inline-code] flag to your command.

[#grep-show-file-name][.inline-code]grep[.inline-code] show file name[#grep-show-file-name]

In some cases, given that a lot of files will be searched which may contain multiple matches, you only want to print out the file name. For this you can add the [.inline-code]-l[.inline-code] flag which stands for “show the file name, not the result itself”.

[#more-on-grep]Find out more about [.inline-code]grep[.inline-code][#more-on-grep]

As always if you want to find out more about how to use the [.inline-code]grep[.inline-code] tool you can use:

Which will print out all the options with explanations. Or:

Which will print out a short page of all the available options.

Источник

Оцените статью
Adblock
detector