Как найти файлы и каталоги в Linux

найти команду

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

Заметка

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

  • Основные функциональные возможности находки.
  • Указание, где искать.
  • Нахождение по имени.
  • Поиск только файлов или только каталогов.
  • Поиск файлов по размеру.
  • Поиск файлов на основе изменений, доступа или изменения статуса.
  • Перенаправление вывода в текстовый файл.
  • Подавление сообщений об ошибках.
  • Примеры.

Основные функциональные возможности находки

Запустив find без каких-либо опций, вы получите список всех файлов и каталогов внутри и под рабочим каталогом. Например, если ваш рабочий каталог — / home / hope / Documents, то при запуске find будет выведено следующее:

  • Каждый файл в / home / hope / Documents.
  • Каждый подкаталог в / home / hope / Documents.
  • Каждый файл в каждом из этих подкаталогов.

Давайте посмотрим на это в действии. Во-первых, давайте проверим наш рабочий каталог с помощью команды pwd:

PWD

/ главная / надежда / Документы

Теперь давайте запустим поиск без каких-либо опций:

находить

.
./картинки
./images/hp
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg
./gimp-2.8.16.tar.bz2
./hp-fanfic
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

В этом примере мы видим в общей сложности десять файлов и четыре подкаталога в нашей папке «Документы».

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

находить .

Приведенный выше пример является «правильным» способом использования find. Если вы попытаетесь использовать его в другой UNIX-подобной операционной системе, такой как FreeBSD, вы обнаружите, что указание каталога является обязательным, поэтому рекомендуется использовать эту форму команды.

Указание, где искать

Чтобы отобразить только файлы и подкаталоги, которые содержатся в каталоге / home / hope / Documents / images, укажите его в качестве первого аргумента команды:

найти / главная / надежда / документы / изображения

/ главная / надежда / Документы / изображения
/ Главная / надежда / Документы / изображения / л.с
/home/hope/Documents/images/hp/snape.jpg
/home/hope/Documents/images/hp/harry.jpg
/ главная / надежда / Документы / изображения / мемы
/home/hope/Documents/images/memes/winteriscoming.jpg
/home/hope/Documents/images/memes/goodguygary.JPG
/home/hope/Documents/images/memes/picard.jpg

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

Если наш рабочий каталог — / home / hope / Documents, мы можем использовать следующую команду, которая находит те же файлы:

найти ./images

Но на этот раз выходные данные отражают начальное местоположение поиска и выглядят так:

./картинки
./images/hp
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg

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

Например, указание -maxdepth 1 будет искать только в каталоге, где начинается поиск. Если какие-либо подкаталоги найдены, они будут перечислены, но не найдены.

находить . -maxdepth 1

.
./картинки
./bigfiles.txt
./gimp-2.8.16.tar.bz2
./hp-fanfic
./archlinux-2016.02.01-dual.iso

Указание -maxdepth 2 будет искать каталог и один подкаталог глубоко:

находить . -maxdepth 2

.
./картинки
./images/hp
./images/memes
./gimp-2.8.16.tar.bz2
./hp-fanfic
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

Задание -maxdepth 3 будет искать на один уровень глубже:

находить . -maxdepth 3

.
./картинки
./images/hp
./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg
./gimp-2.8.16.tar.bz2
./hp-fanfic
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

Нахождение по имени

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

находить . имя «picard.jpg»

./images/memes/picard.jpg

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

находить . имя «* .jpg»

./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes/winteriscoming.jpg
./images/memes/picard.jpg

Обратите внимание, что наша команда не указала файл, расширение которого (в данном случае JPG) прописными буквами. Это связано с тем, что в отличие от других операционных систем, таких как Microsoft Windows, имена файлов Linux чувствительны к регистру.

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

находить . -имя «* .jpg»

./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg

Поиск только файлов или только каталогов

Чтобы вывести только файлы и пропустить имена каталогов из ваших результатов, укажите -type f:

находить . Тип F

./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg
./gimp-2.8.16.tar.bz2
./hp-fanfic/malfoys-revenge.doc
./hp-fanfic/weekend-at-hagreds.doc
./hp-fanfic/dumbledores-lament.doc
./archlinux-2016.02.01-dual.iso

Чтобы получить список только каталогов и пропустить имена файлов, укажите -type d:

находить . тип d

.
./картинки
./images/hp
./images/memes
./hp-fanfic

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

Чтобы отобразить только файлы определенного размера, вы можете использовать опцию -size. Чтобы указать размер, используйте знак плюс или минус (для «больше» или «меньше чем»), число и количественный суффикс, такой как k, M или G.

Например, чтобы найти файлы размером более 50 килобайт, используйте -size + 50k:

находить . размер + 50k

./images/memes/winteriscoming.jpg
./gimp-2.8.16.tar.bz2
./archlinux-2016.02.01-dual.iso

Для файлов размером более 10 мегабайт используйте -size + 10M:

находить . размер + 10M

./gimp-2.8.16.tar.bz2
./archlinux-2016.02.01-dual.iso

Для «больше чем 1 гигабайт» используйте -size + 1G:

находить . размер + 1G

./archlinux-2016.02.01-dual.iso

Для файлов с определенным диапазоном размеров используйте два параметра размера. Например, чтобы найти файлы «больше 10 мегабайт, но меньше 1 гигабайта», укажите -size + 10M -size -1G:

находить . -размер + 10М -размер -1G

./gimp-2.8.16.tar.bz2

Поиск файлов на основе изменений, доступа или изменения статуса

Опция -mtime ограничивает поиск тем, сколько дней с момента изменения содержимого файла. Чтобы указать прошедшие дни, используйте отрицательное число. Например, чтобы найти только те файлы, которые были изменены за последние два дня (48 часов назад), используйте -mtime -2:

находить . -mtime -2

Опция -mmin делает то же самое, но с точки зрения минут, а не дней. Например, эта команда показывает только файлы, измененные за последние полчаса:

находить . -mmin -30

Аналогичный параметр -ctime, который проверяет, когда статус файла последний раз изменялся, измеряется в днях. Изменение статуса — это изменение метаданных файла. Например, изменение прав доступа к файлу — это изменение статуса.

Опция -cmin будет искать изменение статуса, измеряемое в минутах.

Вы также можете искать, когда к файлу обращались в последний раз — другими словами, когда его содержимое было просмотрено в последний раз. Опция -atime используется для поиска файлов на основе их последнего времени доступа, измеренного в днях.

Опция -amin будет выполнять то же ограничение поиска, но измеряется в минутах.

Перенаправление вывода в текстовый файл

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

находить . -iname «* .jpg»> images.txt

Затем вы можете открыть свои результаты в текстовом редакторе или распечатать их с помощью команды cat.

кот images.txt

./images/hp/snape.jpg
./images/hp/harry.jpg
./images/memes/winteriscoming.jpg
./images/memes/goodguygary.JPG
./images/memes/picard.jpg

Кроме того, вы можете направить свой вывод в команду tee, которая выведет вывод на экран и запишет его в файл:

находить . размер + 500M | тройник bigfiles.txt

./archlinux-2016.02.01-dual.iso

кошка bigfiles.txt

./archlinux-2016.02.01-dual.iso

Подавление сообщений об ошибках

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

находить /

найти: `/ var / lib / sudo / ts ': в доступе отказано
находка: `/ var / lib / sudo / lectured ': в доступе отказано
найти: `/ var / lib / polkit-1 ': в доступе отказано
найти: `/ var / lib / container ': в доступе отказано
найти: `/var/lib/gdm3/.dbus ': в доступе отказано
найти: `/var/lib/gdm3/.config/ibus ': в доступе отказано
...

Вы получите это сообщение об ошибке, если find попытается получить доступ к файлу, для которого ваша учетная запись не имеет разрешения на чтение. Вы можете выполнять поиск как суперпользователь (root), который имеет полный доступ ко всем файлам в системе. Но не рекомендуется делать вещи как root, если нет других вариантов.

Если все, что вам нужно сделать, это скрыть сообщения «Отказано в доступе», вы можете добавить 2> 1 | grep -v «Отказано в доступе» до конца вашей команды, например так:

найти / 2> 1 | grep -v «В доступе отказано»

Приведенный выше пример отфильтровывает сообщения «Отказано в доступе» из вашего поиска. Как?

2> 1 — это специальное перенаправление, которое отправляет сообщения об ошибках на стандартный вывод для передачи объединенных строк вывода в команду grep. Затем grep -v выполняет обратное сопоставление «Отказано в доступе», отображая только те строки, которые не содержат эту строку.

Перенаправление и использование grep для фильтрации сообщений об ошибках — это полезный метод, когда «Permission denied» загромождает результаты поиска, и вы не можете выполнить поиск от имени пользователя root.

Примеры

найти ~ /. -name «* .txt» -amin -120

Найдите все файлы в вашем домашнем каталоге и ниже, которые заканчиваются расширением «.txt». Отображать только те файлы, к которым обращались за последние два часа.

находить . -name «* .zip» -size + 10M -mtime -3

Найдите все файлы в рабочем каталоге и ниже, чье имя имеет расширение «.zip» и чей размер превышает 10 мегабайт. Отображать только файлы, содержимое которых было изменено за последние 72 часа.

находить . -имя «* report *» -type f -maxdepth 2

Выполните поиск без учета регистра файлов, в названии которых содержится слово «отчет». Если при поиске найден каталог с «отчетом» в его имени, не отображать его. Поиск только в рабочем каталоге, и один уровень каталога под ним.

find / -name «* init *» 2> 1 | grep -v «В доступе отказано» | tee ~ / initfiles.txt

Найти все файлы в системе, имя которых содержит «init», подавляя сообщения об ошибках. Выведите результаты на экран и выведите их в файл в вашем домашнем каталоге с именем «initfiles.txt».

Ссылка на основную публикацию
Adblock
detector