Примітка: Щоб скористатися функцією find, почніть з відкриття термінального сеансу для доступу до командного рядка.
Основні функціональні можливості find
Запуск пошуку без будь-яких параметрів дасть список кожного файлу і каталогу в робочому каталозі і під ним. Наприклад, якщо у вашому робочому каталозі є / home / hope / Documents, запуск пошуку дасть наступне:
- Кожен файл в / home / hope / Documents .
- Кожен підкаталог в / home / hope / Documents .
- Кожен файл у кожному з цих підкаталогів.
Подивимося в дії. По-перше, перевірте наш робочий каталог за допомогою команди pwd:
pwd
/ home / hope / Документи
Тепер запустимо пошук без будь-яких параметрів:
знайти
. ./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 ./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 . Якщо ви спробуєте скористатися цією іншою операційною системою, подібною до UNIX, наприклад FreeBSD, вам знадобиться вказати каталог, тому добре використовувати цю форму команди.
Вкажіть, де шукати
Щоб перелічити лише файли та підкаталоги, які містяться в каталозі / home / hope / Documents / images, вкажіть його як перший аргумент команди:
find / home / hope / Документи / зображення
/ home / hope / Документи / зображення / home / hope / Documents / images / hp /home/hope/Documents/images/hp/snape.jpg /home/hope/Documents/images/hp/harry.jpg / додому / надія / Documents / images / memes /home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG /home/hope/Documents/images/memes/picard.jpg
Зверніть увагу, що повний шлях також показаний у результатах.
Якщо наш робочий каталог / home / hope / Documents, ми можемо використовувати наступну команду, яка знаходить ті ж самі файли:
find ./images
Але на цей раз вихід відображає початкове місце пошуку та виглядає так:
./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
. ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso
Вказівка -maxdepth 2 буде шукати в каталозі і в одному підкаталозі:
знайти. -maxdepth 2
. ./images ./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-le.doc ./archlinux-2016.02.01-dual.iso
Зазначення -maxdepth 3 здійснюватиметься пошук на один рівень глибше, ніж:
знайти. -максимальну глибину 3
. ./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 ./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 і вкажіть ім'я в лапках:
знайти. -name "picard.jpg"
./images/memes/picard.jpg
Можна також використовувати маски як частину імені файлу. Наприклад, щоб знайти всі файли, ім'я яких закінчується на .jpg, можна використовувати зірочку для представлення решти імені файлу. Коли ви виконуєте команду, оболонка буде накладати назву на все, що відповідає шаблону:
знайти. -name "* .jpg"
./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg
Зверніть увагу, що наша команда не перераховувала файл, розширення якого ( JPG ) великими літерами. Це відбувається тому, що на відміну від інших операційних систем, таких як Microsoft Windows, імена файлів Linux чутливі до регістру.
Щоб виконати пошук, не чутливий до регістру, використовуйте опцію -iname :
знайти. -iname "* .jpg"
./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg
Пошук лише файлів або лише каталогів
Щоб перелічити лише файли та пропустити назви каталогів з результатів, вкажіть тип-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-le.doc ./archlinux-2016.02.01-dual .iso
Щоб вказати лише каталоги та не вказувати імена файлів, вкажіть тип-d :
знайти. -тип d
. ./images ./images/hp ./images/memes ./hp-fanfic
Пошук файлів за розміром
Щоб відобразити лише файли певного розміру, можна скористатися параметром -size . Щоб вказати розмір, використовуйте знак "плюс" або "мінус" (для "більше ніж" або "менше ніж"), число і кількісний суфікс, такий як k, M або G.
Наприклад, щоб знайти файли "більше 50 кілобайт", використовуйте -size + 50k :
знайти. -size + 50k
./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso
Для файлів "більше 10 мегабайт" використовуйте -size + 10M :
знайти. -size + 10M
./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso
Для "більше 1 гігабайта" використовуйте -size + 1G :
знайти. -size + 1G
./archlinux-2016.02.01-dual.iso
Для файлів у певному діапазоні розмірів використовуйте два варіанти розміру. Наприклад, щоб знайти файли "більше 10 мегабайт, але менше 1 гігабайта", вкажіть -size + 10M -size -1G :
знайти. -size + 10M -size -1G
./gimp-2.8.16.tar.bz2
Пошук файлів на основі модифікації, доступу або зміни стану
Параметр -mtime обмежує пошук за кількістю днів після змінення вмісту файлу. Щоб вказати дні в минулому, використовуйте від'ємне число. Наприклад, щоб знайти лише ті файли, які були змінені за останні два дні (48 годин тому), використовуйте -mtime -2 :
знайти. -mtime -2
Опція -mmin робить те ж саме, але з точки зору хвилин, а не днів. Наприклад, ця команда показує лише файли, змінені за останні півгодини:
знайти. -mmin -30
Аналогічним варіантом є -ctime, який перевіряє, коли стан файлу останньо змінювався, виміряний у днях. Зміна статусу - це зміна метаданих файлу. Наприклад, зміна дозволів на файл - це зміна статусу.
Параметр -cmin шукатиме зміну стану, виміряну в хвилинах.
Ви також можете шукати, коли останній доступ до файлу - іншими словами, коли його вміст останнім часом було переглянуто. Параметр -atime використовується для пошуку файлів на основі їхнього останнього часу доступу, виміряного в днях.
Опція -амін виконає те саме обмеження пошуку, але вимірюється в хвилинах.
Перенаправлення виводу до текстового файлу
Якщо ви виконуєте дуже великий пошук, ви можете зберегти результати пошуку у файлі, щоб переглянути результати пізніше. Ви можете зробити це, перенаправляючи вивід пошуку у файл:
знайти. -iname "* .jpg"> images.txt
Ви можете відкрити результати в текстовому редакторі або роздрукувати їх за допомогою команди cat .
cat images.txt
./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg
Крім того, ви можете передати свій вивід у команду tee, яка надрукує вихід на екран і запише його у файл:
знайти. -size + 500M | tee bigfiles.txt
./archlinux-2016.02.01-dual.iso
cat bigfiles.txt
./archlinux-2016.02.01-dual.iso
Пригнічує повідомлення про помилки
Під час пошуку можна отримати повідомлення про помилку "Відмова в дозволі". Наприклад, якщо ви шукаєте кореневий каталог як звичайний користувач:
знайти /
find: `/ var / lib / sudo / ts ': Відхилено дозвіл:` / var / lib / sudo / lectured': Відхилено дозвіл: `/ var / lib / polkit-1 ': Відхилено дозвіл:` / var / lib / container ': Відхилено дозвіл: `/var/lib/gdm3/.dbus': Відхилено дозвіл:` /var/lib/gdm3/.config/ibus ': Відхилено дозвіл ...
Ви отримаєте повідомлення про помилку, якщо пошук спробує отримати доступ до файлу, до якого не має дозволу читати обліковий запис користувача. Ви можете виконати пошук як суперкористувач ( root ), який має повний доступ до кожного файлу в системі. Але не рекомендується робити речі як корінь, якщо немає інших варіантів.
Якщо потрібно лише приховати повідомлення "Відхилення дозволу", можна додати 2 &> 1 | grep -v "Відмовлено в дозволі" до кінця вашої команди, наприклад:
find / 2> & 1 | grep -v "Відмовлено в дозволі"
Наведений вище приклад відфільтровує повідомлення "Відхилено дозвіл" від вашого пошуку. Як?
2> & 1 - це спеціальне перенаправлення, яке посилає повідомлення про помилки на стандартний вивід для передачі комбінованих рядків виводу до команди grep . Потім grep -v виконує зворотне збіг на "Permission denied", відображаючи лише рядки, які не містять цього рядка.
Переадресація та використання grep для фільтрації повідомлень про помилку є корисним методом, коли "Відхилення дозволу" заважає результатам пошуку, і ви не можете виконати пошук як кореневий.
Приклади
find ~ /. -name "* .txt" -amin -120
Знайдіть всі файли у вашому домашньому каталозі та нижче, які закінчуються розширенням " .txt ". Відображати лише файли, доступні за останні дві години.
знайти. -name "* .zip" -size + 10M -mtime -3
Знайдіть всі файли у робочому каталозі та нижче, чиє ім'я має розширення " .zip " і розмір яких перевищує 10 мегабайт. Відображати лише файли, зміст яких було змінено за останні 72 години.
знайти. -iname "* report *" -тип f -maxdepth 2
Виконайте нечутливий до регістру пошук файлів, які містять у своєму імені слово " звіт ". Якщо пошук знаходить каталог з "звітом" у своєму імені, не показувати його. Шукати тільки в робочому каталозі, а один рівень під ним.
find / -name "* init *" 2> & 1 | grep -v "Відмовлено в дозволі" | tee ~ / initfiles.txt
Знайти всі файли в системі, ім'я яких містить " init ", придушення повідомлень про помилки. Відображати результати на екрані та виводити їх у файл у вашому домашньому каталозі з ім'ям " initfiles.txt ".