Примеры использования программы find с параметром exec

Содержание:

Поиск с помощью консольных утилит

Есть люди, которые ненавидят работу в терминале, а есть те, кому наоборот такой способ общения с системой нравится больше. Но мы рассмотрим как терминальные утилиты, так и графические.

find

Итак, самая важная команда поиска в Linux. Она ищет строку текста в соответствии с указанными параметрами в файлах и каталогах.

Например:

$ man find

locate

Утилиту locate можно отнести ко второму типу средств для поиска в Linux. Команда locate опирается на базу данных, которая создана утилитой updatedb. Эта база данных также обновляется системным планировщиком cron. Этот способ поможет найти файлы, которые реально существуют в файловой системе. Базу данных вы можете обновлять и сами.

Команда locate позволяет выполнить поиск файла по имени Linux. Вы можете использовать различные регулярные выражения в запросе: Правка». Вы можете фильтровать файлы по имени, содержанию и размещению. Если вы включили индексацию файлов Baloo, то Dolphin сможет отфильтровать элементы по типу и дате изменения.

Krusader

Данная программа распространена среди пользователей KDE Plasma в качестве альтернативы Dolphin, так как Krusader имеет множество дополнительных опций. Данное приложение работает как GUI для вышеперечисленных утилит find и locate. Krusader позволяет настроить множество фильтров, такие как тип файла, включенные и исключенные каталоги, размер, владелец и права доступа.

Эта программа также может искать по ключевым словам, и вы даже можете использовать регулярные выражения для сужения поисковой выдачи. Если вы никогда не пробовали пользоваться программой Krusader, то обязательно стоит это попробовать.

Thunar

В файловый менеджер Thunar интегрирована поисковая утилита под названием Catfish. Вы можете сортировать файлы по имени, типу и дате изменения, можете выполнить поиск по содержимому Linux. Catfish может искать и по неполным именам файлов, так что вам не обязательно нужно помнить полное и точное название искомого файла.

Синтаксис команды find

Общий синтаксис команды find, который вы можете найти в справочном руководстве, может показаться не совсем простым, поэтому я приведу более удобный для восприятия:

Путь

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

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.

-depth (или -d) Поиск в подкаталогах перед поиском в самом каталоге.
-L При поиске следовать по символическим ссылкам.
-maxdepth N При поиске проверять не более чем N вложенных уровней каталогов.
-mindepth N Не проверять вложенные каталоги уровня N и меньше.
-mount Не искать в каталогах других файловых систем.

Критерии поиска

У команды find может быть несколько критериев поиска (их также называют tests). Каждый критерий представляет собой определенное условие проверки, которое возвращает либо true либо false. Это можно сравнить с условиями оператора if в программировании. В процессе обработки очередного файла команда find по очереди проверяет каждый критерий, и если очередной критерий возвращает false, тогда команда find переходит к следующему файлу. Критериев у команды find довольно много, мы рассмотрим только некоторые из них.

-atime N Последний раз к файлу обращались N дней назад.
-mtime N Последнее изменение файла было N дней назад.
-name шаблон Имя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-newer другой_файл Файл был изменен позже, чем другой_файл.
-size N Размер файла равен N блокам, если указано +N, тогда размер файла больше N, -N — меньше. Символ после N означает размер блока. b — 512 байт, с — байт, w — 2 байта, k — килобайт, M — мегабайт, G — гигабайт.
-type C Файл типа C. Наиболее часто используемые значения для С: d — каталог, f — файл.
-user Имя_пользователя Файл принадлежит пользователю с именем Имя_пользователя.

Примеры использования команды find с использованием критериев

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~».

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak.

Операторы

Критерии можно объединять, используя операторы. Ниже приведены операторы в порядке убывания их приоритета.

Короткая форма оператора Длинная форма Описание
! критерий -not Отрицание (возвращает true, если критерий false)
критерий1-a критерий2 -and Оператор И (true, если критерий1 и критерий2 true)
критерий1-o критерий2 -or Оператор ИЛИ (true, если критерий1 или критерий2 true)

В общем случае при использовании операторов критерии проверяются в порядке их приоритета. Изменить порядок можно с помощью скобок. Скобки нужно выделять с помощью обратного слеша.

Примеры использования команды find с использованием операторов

Найти в текущем каталоге файлы, начинающиеся с символа «~» или c «temp» и являющиеся именно обычными файлами (-type f), а не каталогами.

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

Действия над файлами

Когда выполняется команда find, вы можете выполнять различные действия над найденными файлами. Рассмотрим основные из них.

-exec команда \;
Выполнить команду

Обратите внимание, что после команды ставится обратный слеш и точка с запятой.
-execdir команда \;
То же самое что и exec, но команда вызывается из подкаталога, содержащего текущий файл.
-ok команда \;
То же самое, что и exec, но перед обработкой очередного файла будет выводится запрос на выполнение команды.
-okdir команда \;
То же что ok для execdir.
-print
Вывод имени файла на экран.
-ls
Выполнение команды ls -dils над текущим файлом.. В выполняемых командах вы можете использовать параметр {} в качестве аргумента, который заменяется путем к текущему файлу

В выполняемых командах вы можете использовать параметр {} в качестве аргумента, который заменяется путем к текущему файлу.

Примеры использования команды find с использованием действий

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «~», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm).

Примеры использования du

Чтобы просто вывести список папок в определённом каталоге и занимаемое ими место, например, в /var выполните:

По умолчанию размер выводится в байтах. Для того чтобы размер выводился в более читабельном виде используйте опцию -h:

Или вы можете указать размер блока. Тогда точность будет немного ниже, потому что минимальная единица измерения — один блок. Например, для вывода размера папок в мегабайтах с размером блока в 1024 килобайт используйте опцию -B с параметром M:

Если надо выводить размер не только папок, но и файлов, которые там находятся используйте опцию -a:

Для того чтобы вывести только общий размер всех файлов и папок нужно применить опцию -s:

Если вы хотите вывести размер папок без вложенных в них подпапок используйте опцию -m:

Ещё можно вывести строчку с общим размером всей папки. Правда использовать эту возможность есть смысл только с опцией -S, потому что общий размер папки во всех других случаях и так отображается:

Если вам надо исключить какие-либо файлы из подсчёта, следует использовать опцию -exclude. Например, давайте исключим все лог файлы:

Чтобы данные были более наглядными их желательно отсортировать. Встроенной поддержки сортировки в du linux нет, зато можно воспользоваться утилитой sort с опцией -h. Эта опция нужна чтобы сортировались единицы измерения в понятном для чтения формате:

find + sed

К результатам команды find можно сразу же применить

sed

find . -type f -name ‘*.php’ -exec sed -i ‘s@python/old_file_name\.php@python/new_directory/new_name\.php@’ {} \;

. означает, что ищем в текущей директории (и вложенных)

Эта команда заменяет везде

на

Следующий пример

find . -type f -name ‘*.php’ -exec sed -n ‘/\/i\/aws\/oauth.php/ p’ {} \;

Эта команда ищет по всем .php файлам строку /i/aws/oauth.php

Если нужно не найти или заменить строку а показать название файла, в котором есть определённые символы
— удобно воспользоваться связкой find + grep

Добавить в функцию my_function дополнительный аргумент — сразу в всех .php файлах.

find -type f -name «*.php» -exec sed ‘smy_function(\$old_arg1,\ \$old_arg2)my_function(\$old_arg1,\ \$old_arg2,\ \$new_arg1’ {} \;

find -type f -name «*.php» -exec sed ‘smy\_function(\$old\_arg1,\ \$old\_arg2)my\_function(\$old\_arg1,\ \$old\_arg2,\ \$new\_arg1’ {} \;

10 примеров команд find в Linux

Команда Linux find является очень мощным. Она может производить поиск по всей файловой системе, чтобы найти файлы или каталоги в соответствии с критериями поиска, которые вы укажете. В этой статье я покажу 10 примеров команд Linux для поиска, которые будут очень полезны для новичков и экспертов.

1. Найти файлы, используя имя

# find /etc -name passwd

# find /etc -name passwd

Допустим у меня есть веб сервер и все мои файлы (HTML, php)  лежат в директории /var/www/, в которую я  уже перешел. Мне нужно найти файлы которые не открывались (не изменялись)  около 1 месяца после поиска нужно положить (скопировать) ссылки на данные файлы в директорию /var/www/my_test_domain:

# find \( -name "*.htm" -o -name "*.html" \) -a -ctime -30 \
-exec ln {} /var/www/my_test_domain \;

2. Найти файлы, используя имя с учетом регистра

# find /etc -iname Passwd

find /etc -iname Passwd

3. Найти файлы в зависимости от типа файлов

Найти только файлы сокетов:

# find . -type s

Найти все каталоги:

# find . -type d

Найти только обычные файлы:

# find . -type f

4. Найти файлы по времени последней модификации

# find . -mtime -7

find . -mtime -7

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

Найти файлы больше, чем 200 мб:

# find /var -size +200M

Найти файлы, размер которых меньше 50 мб:

# find /var -size -50M

6. Найти файлы, используя разрешение

# find /var -perm 777

7. Поиск и удаление

Удалить PHP файлы можно следующим образом:

# find . -iname "*.php" -exec rm -rf {} \;

или

# find . -iname "*.php" -print | xargs rm –f

8. Найти все пустые файлы

# find /var -empty

9. Поиск файлов только в текущем каталоге, не искать у вложенных каталогов этой директории:

# find /etc -maxdepth 1 -name passwd

10. Найти файлы с различными расширениями

# find / -type f \( -name "*.php" -o -name "*.php5" \)

Скопировать все файлы которые имеют расширение  *.txt в файлы с соответствующим началом *.new.txt (например был файл file_1.txt, а нужно чтобы стал file_1.new.txt):

# find /home/captain/src/ | xargs -l -I{} sh -c 'a={}; cp $a 'echo $a | sed 's/txt$/new.txt/''
# find | xargs -l -I{} sh -c 'a={}; cp $a `basename $a .txt`.new.txt'

Это я нашел в интернете, но оно у меня не работало, оставил, может кто то поправит.

Я написал скрипт следующего содержания:

# vim /home/captain/cp.sh
#!/bin/sh
for i in `find /home/captain/src/ -iname "*.txt"` 
do
NAME=`echo "$i" | sed 's/\.txt/new.txt/'`
cp $i $NAME
done

И еще одна версия:

# for i in *.txt; do cp  ${i} ${i%.*}.new.${i#*.} ; done

Тема «10 примеров команд find  в Linux» озвучена и так же описана, на этом я закончу.

Владение файлами и права доступа

Команда chmod

Команда chmod (от англ. «change mode») позволяет изменить права доступа к файлам. Она работает в двух режимах: символьном и числовом.

При использовании числового режима вы можете установить разрешения для владельца, группы и всех остальных при помощи заданного набора чисел. Разрешения на запись, чтение и выполнение имеют следующие числовые значения:

    (чтение) =

    (запись) =

    (выполнение) =

   нет разрешений =

Совокупность разрешений для определенного класса пользователей описывается суммой соответствующих значений разрешений. Например, чтобы дать владельцу файла права на чтение и запись, а также только права на чтение членам группы и всем другим пользователям, необходимо выполнить:

Только пользователь root, владелец файла или пользователь с правами sudo могут изменять права доступа к файлу.

Для рекурсивного изменения прав всех файлов и папок в заданном каталоге, используйте команду с опцией :

Команда chown

Команда chown (от англ. «change owner») позволяет изменить владельца и группу заданного файла, каталога или символьной ссылки.

Чтобы изменить владельца файла, достаточно выполнить:

Чтобы изменить как владельца, так и группу файла, вызовите:

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

Команда sudo

Команда sudo (от англ. «Substitute User and do« = «подменить пользователя и выполнить») позволяет запускать программы от имени другого пользователя (по умолчанию, пользователя root). Использование команды , вместо входа в систему под учетной записью пользователя root, более безопасно, поскольку вы можете предоставить ограниченные административные привилегии отдельным пользователям, не зная пароля пользователя root.

Чтобы использовать , просто добавьте префикс перед именем команды:

GUI

Графический интерфейс во многом облегчает жизнь новичкам, которые только установили дистрибутив Linux. Данный метод поиска очень похож на тот, что осуществляется в ОС Windows, хотя и не может дать всех тех преимуществ, что предлагает «Терминал». Но обо всем по порядку. Итак, рассмотрим, как сделать поиск файлов в Linux, используя графический интерфейс системы.

Способ 1: Поиск через меню системы

Сейчас будет рассмотрен способ поиска файлов через меню системы Linux. Проводимые действия будут выполняться в дистрибутиве Ubuntu 16.04 LTS, однако инструкция общая для всех.

Допустим, вам необходимо найти в системе файлы под именем «Найди меня», также этих файлов в системе два: один в формате «.txt», а второй — «.odt». Чтобы их отыскать, необходимо изначально нажать на иконку меню (1), и в специальном поле для ввода (2) указать поисковый запрос «Найди меня».

Отобразится результат поиска, где будут показаны искомые файлы.

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

Расположен он в правой части меню. Фильтровать вы можете по двум критериям: «Категории» и «Источники». Разверните эти два списка, нажав по стрелочке рядом с названием, и в меню уберите выделения с ненужных пунктов. В данном случае разумнее будет оставить лишь поиск по «Файлы и папки», так как мы ищем именно файлы.

Сразу можно заметить недостаток этого способа — нельзя детально настроить фильтр, как в «Терминале». Так, если вы ищите текстовый документ с каким-то названием, в выдаче вам могут показать картинки, папки, архивы и т. п. Но если вы знаете точное наименование нужного файла, то сможете быстро отыскать его, не изучая многочисленные способы команды «find».

Способ 2: Поиск через файловый менеджер

Второй способ имеет существенное преимущество. Используя инструмент файлового менеджера, можно произвести поиск в указанном каталоге.

Выполнить данную операцию проще простого. Вам необходимо в файловом менеджере, в нашем случае Nautilus’е, войти в папку, в которой предположительно находится искомый файл, и нажать кнопку «Поиск», расположенную в верхнем правом углу окна.

В появившееся поле для ввода вам нужно ввести предполагаемое название файла. Также не забывайте, что поиск может быть проведен не по целому имени файла, а лишь по его части, как показано на примере ниже.

Как и в предыдущем способе, в этом точно так же можно использовать фильтр. Для его открытия нажмите на кнопку со знаком «+», расположенную в правой части поля ввода поискового запроса. Откроется подменю, в котором вы можете из выпадающего списка выбрать искомый тип файла.

Use Grep to Find Files Based on Content

The find command in Linux is great but it can only filter the directory tree according to filename and meta data. To search files based on what they contain you’ll need a tool like grep. Take a look:

This goes through every object in the current directory tree (.) that’s a file (-type f) and then runs grep ” forinstance ” for every file that matches, then prints them on the screen (-print). The curly braces ({}) are a placeholder for those results matched by the Linux find command. The {} go inside single quotes (‘) so that grep isn’t given a misshapen file name. The -exec command is ended with a semicolon (;), which also needs an escape (\;) so that it doesn’t end up being interpreted by the shell.

Before -exec was implemented, xargs would have been used to create the same kind of output:

Навигация по файловой системе

При навигации по файловой системе в Linux можно использовать как абсолютный, так и относительный пути к ресурсу.

Абсолютный (или полный) путь начинается с корневого каталога, обозначаемого символом , а относительный путь начинается с текущего каталога (в котором в данный момент работает пользователь).

Команда pwd

Команда pwd (от англ. «present working directory») позволяет узнать, в каком каталоге вы находитесь в данный момент:

Результатом будет путь к текущему рабочему каталогу:

Команда cd

Команда cd (от англ. «change directory») используется для смены текущего рабочего каталога. При использовании без каких-либо параметров, команда перенесет вас в ваш домашний каталог:

Чтобы перейти в другой каталог, вы можете использовать абсолютный или относительный путь. Например, перейти в папку Downloads, расположенную в текущем каталоге, можно как через относительный путь:

Так и через абсолютный путь:

Две точки  обозначают родительский каталог или каталог уровнем выше текущего. Предположим, что в данный момент вы находитесь в каталоге usr/local/bin. Чтобы перейти в каталог usr/local (на один уровень выше текущего каталога), необходимо ввести:

Чтобы подняться на два уровня вверх:

Чтобы вернуться к предыдущему рабочему каталогу, используйте символ тире в качестве опции:

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

Use grep to Find a File in Linux Based on Content

The command can only filter the directory hierarchy based on a file’s name and metadata. If you need to search based on the file’s content, use a tool like
. Consider the following example:

This searches every object in the current directory hierarchy () that is a file () and then runs the command for every file that satisfies the conditions. The files that match are printed on the screen (). The curly braces () are a placeholder for the match results. The are enclosed in single quotes () to avoid handing a malformed file name. The command is terminated with a semicolon (), which should be escaped () to avoid interpretation by the shell.

Поиск файлов через терминал. Команда locate

Команда locate считается устаревшей, т.к. она выполняет поиск не в реальном времени, подобно команде , а только по ранее созданной базе файлов. Вы вводите слово, которое вас интересует, и команда выдает все известные ей файлы, имя которых содержит заданное слово. Команда поддерживает работу с регулярными выражениями. Например, чтобы найти все файлы, в имени которых содержится слово users, необходимо выполнить:

Стоит заметить, что если файл появился в системе уже после создания базы, то он не будет найден.

Иногда вам может потребоваться обновить базу данных, к которой обращается . Для этого необходимо ввести команду (её запуск производится от имени суперпользователя):

Разница между locate и find Линукс

Многие новички часто спрашивают, почему в операционной системе Линукс есть две одинаковые команды: locate и find, ведь выполняют они одни и те же действия. Зачем использовать одну, если есть другая, и наоборот.

На самом деле, различия есть, и они весьма существенные. Цель команд одна – найти файл по заданным характеристикам или имени, а вот работают они по-разному. В случае с find поиск выполняется в реально существующей системе. Он более медленный, но его результаты всегда актуальны. К тому же, у find больше опций.

Команда locate делает все то же самое, но использует для поиска базу данных, которая была создана ранее (командой updatebd). Процедура нахождения файла или папки выполняется быстрее, но системе приходится пользоваться «старой» базой данных и искать имена или их части.

Для поиска по имени в Linux используют find name

Method 2: Using Locate command

There is another command Locate that can be used to search files in Linux. It does not have as many search conditions as the Find utility offers but it is much better and faster than the Find utility. The reason behind is the background process that actually runs in your system and searches and stores new files in its own database. Unlike Find command, it does not search your local hard disk for files and directories but instead, it searches them in its own database. Its database should be regularly updated for the search utility to work.

Installing Locate

Locate is not installed by default in the Linux OS. You will need to manually install it. Press Ctrl+Alt+T to launch the Terminal and then type the following command as sudo to install the Locate utility:

$ sudo apt-get install locate

Once the installation is completed, you can use the Locate utility right away.

The general syntax of the command is:

$ locate –i filename

Where -i is used to ignore case distinctions.

Searching for a file

For instance, to search for a filename “centos”, use the following command in Terminal:

$ locate –i centos

It will search for all the files that include the string “centos” in their filenames.

Search for Multiple files

You can also search for multiple file names simultaneously. For instance, use the following command in Terminal to search for two files “sdn.txt” and “centos”:

$ locate –i sdn.txt centos

Search using Wildcard

You can also use the wildcard character to find the files that match the query. For instance to search for all the files that ends in “.iso”, use the following command in Terminal:

$ locate –i *.iso

Update locate database

Locate command relies on its database to work, so it needs to be updated regularly. Run the following command in Terminal to update the Locate utility database:

$ sudo updatedb

Пример №2

В директориях , ,… лежат файлы filename.txt. Нужно вытащить их оттуда, но уже с разными именами.

При необходимости создадим и очистим нашу экспериментальную директорию и создадим там необходимую структуру файлов:

user ~ $user ~ $user ~ $
mkdir -p ~/test/
rm ~/test/*
cd ~/test/
user test $user test $
mkdir -p dir{1..5}/subdir{1..5} 
touch dir{1..5}/subdir{1..5}/filename.txt

Итак, у нас получилось 25 файлов filename.txt в директориях , ,… .

find

Выведем эти файлы. В этом случае тоже сработал бы, но воспользуемся для разнообразия поиском по имени. Также используем звёздочку вместо точки, чтобы избавиться от ведущего в выводе.

user test $
find * -name 'filename.txt'

Попросим заменить все слэши на дефисы.

user test $
find * -name 'filename.txt' | sed 'p;s:/:-:g'

xargs

Завершаем переименование:

user test $
find * -name 'filename.txt' | sed 'p;s:/:-:g' | xargs -n2 -p mv

Убедившись, что всё произойдёт правильно, убираем ключ и повторяем команду.

Method 1: Using Find command

Find is a highly flexible command used to search files based on a variety of conditions. It is a very helpful tool when searching a file for which you do not remember the name of the file. Using the Find command you can search based on file and folder name, creation date, modification date, and permissions. You can combine these multiple conditions in a one Find command. It is a very powerful but slower search tool.

The general syntax of the command is:

$ find /path/to/file/ -iname filename

Search files in a specific directory

You can use the Find command to search for all files in a specific directory. The general syntax would be:

$ find /path/to/file/

For instance, to find all the files under the /home/tin/Downloads/ directory, launch the Terminal by pressing Ctrl+Alt+T and then run the following command in Terminal:

$ find /home/tin/Downloads/

Search files in the current directory

To search for files in a current directory, use

$ find .

To search for a file named e.g “softwares” under current directory, use the following command in Terminal:

$ find . -iname Softwares

Search using a wildcard

You can also use the wildcard characters to find the files that match the query. The general syntax would be:

$ find /path/to/file/ -iname filename*

For instance to search files that start with the word “cent”, run the following command in Terminal:

$ find /home/tin/ -iname cent*

Search for empty files

You can also search for empty files using the Find command. The general syntax would be:

$ find /path/to/file/ -iname -empty

For instance to find empty files under the /home/tin directory, run the following command in Terminal:

$ find /home/tin/ -empty

Search based on date and time

Using Find command, you can also search for files depending upon when they were access or modified. There are types of time you can use to search files:

  • mtime (Modification time): when the file’s content was modified last time.
  • atime (Access time): when the file was accessed last time.
  • ctime (Change time): when the file attributes were modified last time.

For instance, to search for files in a current directory that were modified less than 2 days ago, run the following command in Terminal:

$ find . -mtime -2

To search for files that were accessed less than 2 days ago, run the following command in Terminal:

$ find . –atime -2

To search for files that were changed less than 2 days ago, run the following command in Terminal:

$ find . –ctime -2

Search based on file size

For instance, to search file whose size is larger than 5MB size, we can use the following command in Terminal:

$ find . –size +5M\

Search based on file permissions

It is used to find files with specific permission. The general syntax would be:

$ find /path/to/file/ -type -perm mode

Where:

Type parameter includes d or f value that are used for specifying type of the file. d for directories and f for files only.mode can be either with numeric permission (e.g 777, 655.. etc) or symbolic permission (e.g u=x, a=r+x).

For instance, to search for a file with the permission of 644, we can use the following command in Terminal:

$ find . –type f –perm 644

How to Find and Process a File in Linux

The option runs commands against every object that matches the find expression. Consider the following example:

This filters every object in the current hierarchy () for files named and runs the command to modify the results’ file permissions.

The commands run with the are executed in the process’s root directory. Use to perform the specified command in the directory where the match resides. This may alleviate security concerns and produce a more desirable performance for some operations.

The or options run without further prompts. If you prefer to be prompted before action is taken, replace with or with .

Найти файлы по типу

Иногда вам может потребоваться поиск определенных типов файлов, таких как обычные файлы, каталоги или символические ссылки. В Linux все является файлом.

Для поиска файлов по их типу используйте параметр и один из следующих дескрипторов, чтобы указать тип файла:

  • : обычный файл
  • : каталог
  • : символическая ссылка
  • : символьные устройства
  • : блочные устройства
  • : именованный канал (FIFO)
  • : сокет

Например, чтобы найти все каталоги в текущем рабочем каталоге , вы должны использовать:

Типичным примером может быть рекурсивное изменение разрешений файлов веб-сайтов на и разрешений каталогов на с помощью команды :

Conclusion

You can search for files on your server using the find and locate commands in Linux. These two powerful tools have their own advantages. Therefore, we encourage you to give both of them a go and see which one is more suitable for you. Here’s a short summary of what we talked about:

  • Use find to search for files based on name, type, time, size, ownership and permissions, in addition to some other useful options
  • Install and use Linux locate command to perform faster system-wide searches for files. It also allows you to filter out by name, case-sensitive, folder, and so on.

If you have any questions, feel free to ask in the comments!

Find Files by Name using find command

1. Find From the Current Directory

The command searches the current working directory for the file name ‘putty.txt’ However if a user wants the ‘find command’ to return only files and not the directories then one has to add -type f at the end of the command.

3. Find Files in /Home Directory Regardless of Case Sensitive

The command seeks to look for all files irrespective of the case, i.e., uppercase or lowercase in the /home directory. Therefore the result will display all results that match the file name.

4. Search All Directories for a Particular File

The command searches directories with a specific name such as ‘puttygen’ in the root folder. For example, the title to search is ‘puttygen,’ then the user has to type the below command.

ОПЦИИ

Начнём с того, что «grep» умеет не только фильтровать стандартный ввод , но и осуществлять поиск по файлам. По умолчанию «grep» будет искать только в файлах, находящихся в текущем каталоге, однако при помощи очень полезной опции можно сказать команде «grep» искать рекурсивно начиная с заданной директории.

GIST | По умолчанию команда «grep» чувствительна к регистру. Следующий пример показывает как можно искать и при этом не учитывать регистр, например «Adams» и «adams» одно и то же:

--ignore-case 'adams'
George Washington, 1789-1797
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
John Adams, 1797-1801

GIST | Поиск наоборот (иногда говорят инвертный поиск), то есть будут выведены все строки, кроме имеющих вхождение указанного шаблона:

--invert-match 'Adams'
George Washington, 1789-1797
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
George Washington, 1789-1797
Thomas Jefferson, 1801-1809

GIST | Опции конечно же можно и нужно комбинировать друг с другом. Например поиск наоборот с выводом порядковых номеров строк с вхождениями:

--line-number --invert-match 'Adams'
George Washington, 1789-1797
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
1:George Washington, 1789-1797
3:Thomas Jefferson, 1801-1809

GIST | Раскраска. Иногда удобно, когда искомое нами слово подсвечивается цветом. Все это уже есть в «grep», остается только включить:

--line-number --color=always 'Adams'
George Washington, 1789-1797
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
2:John Adams, 1797-1801

GIST | Мы хотим выбрать все ошибки из лог файла, но знаем что в следующей сточке после ошибки может содержаться полезная информация, тогда удобно вывести несколько строк из контекста. По умолчанию «grep» выводит лишь строку, в которой было найдено совпадение, но есть несколько опций, позволяющих заставить «grep» выводить больше. Для вывода нескольких строк (в нашем случае двух) после вхождения:

--color=always -A2 'Adams'
George Washington, 1789-1797
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
James Madison, 1809-1817
James Monroe, 1817-1825
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
James Madison, 1809-1817

GIST | Аналогично для дополнительного вывода нескольких строк перед вхождением:

--color=always -B2 'James'
George Washington, 1789-1797
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
James Madison, 1809-1817
James Monroe, 1817-1825
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
James Madison, 1809-1817
James Monroe, 1817-1825

GIST | Однако чаще всего требуется выводить симметричный контекст, для этого есть ещё более сокращённая запись. Выведем по две строки как сверху так и снизу от вхождения:

--color=always -C2 'James'
George Washington, 1789-1797
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
James Madison, 1809-1817
James Monroe, 1817-1825
John Quincy Adams, 1825-1829
Andrew Jackson, 1829-1837
Martin Van Buren, 1837-1841
John Adams, 1797-1801
Thomas Jefferson, 1801-1809
James Madison, 1809-1817
James Monroe, 1817-1825
John Quincy Adams, 1825-1829
Andrew Jackson, 1829-1837

GIST | Когда Вы ищете , то по умолчанию «grep» будет выводить также, , и тому подобные комбинации. Найдём только те строки, которые выключают именно всё слово целиком:

--word-regexp --color=always 'John'
John Fitzgerald Kennedy, 1961-1963
Lyndon Baines Johnson, 1963-1969
John Fitzgerald Kennedy, 1961-1963

GIST | Ну и напоследок если Вы просто хотите знать количество строк с совпадениями одним единственным числом, но при этом не выводить больше ничего:

--count --color=always 'John'
John Fitzgerald Kennedy, 1961-1963
Lyndon Baines Johnson, 1963-1969
Richard Milhous Nixon, 1969-1974
2

Стоит отметить, что у большинства опций есть двойник, например можно привести к более короткому виду и т.д.

Найти и удалить файлы

Чтобы удалить все совпадающие файлы, добавьте параметр в конец выражения соответствия.

Убедитесь, что вы используете эту опцию, только если уверены, что результат соответствует файлам, которые вы хотите удалить. Перед использованием опции всегда рекомендуется распечатать совпадающие файлы.

Например, чтобы удалить все файлы, заканчивающиеся на из , вы должны использовать:

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

Когда дело доходит до каталогов, может удалять только пустые каталоги, как и .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector