Рекурсивний пошук файлів у поточних і підкаталогах за допомогою символів підстановки в Linux

Shell

Ефективний пошук файлів у Linux

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

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

Команда опис
find Шукає файли та каталоги в ієрархії каталогів
-name Зіставляє файли за їх назвою за допомогою шаблону підстановки
os.walk Генерує імена файлів у дереві каталогів шляхом переміщення зверху вниз або знизу вгору
fnmatch.fnmatch Перевіряє, чи ім’я файлу або рядок відповідає шаблону підстановки
param Визначає параметри для сценаріїв і функцій PowerShell
Get-ChildItem Отримує елементи в одному або кількох указаних місцях
-Recurse Вказує команді на рекурсивний пошук у каталогах
-Filter Фільтрує елементи за допомогою виразу підстановки

Детальне пояснення сценаріїв рекурсивного пошуку файлів

Перший сценарій використовує сценарій оболонки для пошуку файлів у поточному каталозі та його підкаталогах на основі заданого шаблону підстановки. Він починається з shebang, щоб вказати інтерпретатор сценарію. Потім сценарій перевіряє, чи вказав користувач шаблон підстановки як аргумент, використовуючи if [ $# -eq 0 ]. Якщо ні, користувач запитує правильне використання та завершує роботу. Якщо вказано шаблон, сценарій використовує команду find з опцією -type f для пошуку файлів і опцією -name для відповідності шаблону підстановки. Команда find дуже ефективна для рекурсивного пошуку файлів у системах на основі Unix. Сценарій закінчується виходом 0, що вказує на успішне виконання.

Другий сценарій — це сценарій Python, який також рекурсивно шукає файли на основі шаблону підстановки. Він починається з імпортування модулів os і sys, які необхідні для взаємодії з операційною системою та обробки аргументів командного рядка. Сценарій перевіряє, чи вказав користувач шаблон підстановки; якщо ні, він друкує правильне використання та завершує роботу. Використання os.walk дозволяє сценарію проходити дерево каталогів. Для кожного знайденого файлу fnmatch.fnmatch перевіряє, чи ім’я файлу відповідає шаблону підстановки, друкуючи відповідні шляхи до файлів. Цей скрипт корисний для користувачів, які віддають перевагу Python для сценаріїв і потребують більшої гнучкості та читабельності свого коду.

Третій сценарій використовує PowerShell для виконання подібного завдання в системах Windows. Сценарій використовує оператор param для визначення параметра для шаблону підстановки. Якщо шаблон не надано, він підказує користувачу правильне використання. Командлет Get-ChildItem у поєднанні з прапорцем -Recurse рекурсивно отримує елементи у вказаних місцях. Параметр -Filter застосовує шаблон підстановки для відповідності певним файлам. Цей сценарій ідеально підходить для користувачів, які працюють у середовищі Windows, використовуючи потужні й універсальні можливості сценаріїв PowerShell для ефективного керування та пошуку файлів.

Рекурсивний пошук файлів за допомогою команди Find

Сценарії оболонки в Linux

#!/bin/bash
# Script to recursively find files based on wildcard matching

# Check if the user has provided a wildcard pattern
if [ $# -eq 0 ]
then
  echo "Usage: $0 <wildcard-pattern>"
  exit 1
fi

# Find and print the files matching the pattern
find . -type f -name "$1"

exit 0

Сценарій Python для рекурсивного пошуку файлів

Сценарії Python

import os
import sys

# Check if the user has provided a wildcard pattern
if len(sys.argv) != 2:
    print("Usage: python script.py <wildcard-pattern>")
    sys.exit(1)

# Get the wildcard pattern from the command line argument
pattern = sys.argv[1]

# Walk through the directory tree
for root, dirs, files in os.walk("."):
    for file in files:
        if fnmatch.fnmatch(file, pattern):
            print(os.path.join(root, file))

Сценарій PowerShell для рекурсивного пошуку файлів

Сценарії PowerShell

# Check if the user has provided a wildcard pattern
param (
    [string]$pattern
)

if (-not $pattern) {
    Write-Host "Usage: .\script.ps1 -pattern '<wildcard-pattern>'"
    exit 1
}

# Get the files matching the pattern
Get-ChildItem -Recurse -File -Filter $pattern

Розширені методи рекурсивного пошуку файлів

На додаток до базових методів рекурсивного пошуку файлів, які обговорювалися раніше, існує кілька розширених методів, які можуть покращити ваші можливості пошуку файлів у Linux. Один із таких методів передбачає використання команди grep у поєднанні з find для пошуку файлів, що містять певні текстові шаблони. Наприклад, ви можете використовувати знайти. -type f -name "*.txt" -exec grep "search_text" {} +, щоб знайти всі текстові файли, що містять рядок "search_text". Це особливо корисно для розробників і системних адміністраторів, яким потрібно ефективно шукати великі кодові бази або файли журналів.

Іншим потужним інструментом для рекурсивного пошуку файлів є fd, проста, швидка та зручна альтернатива find. fd має розумні значення за замовчуванням і забезпечує інтуїтивно зрозумілий синтаксис. Наприклад, команда fd "pattern" рекурсивно шукатиме файли, які відповідають шаблону, і вона підтримує регулярні вирази за замовчуванням. Крім того, fd є швидшим, ніж find у багатьох сценаріях завдяки розпаралеленому обходу файлової системи. Для користувачів, яким потрібні розширені функції пошуку зі зручним інтерфейсом, fd може стати чудовим вибором.

  1. Як рекурсивно шукати файли з певним розширенням?
  2. Використовуйте команду знайти. -type f -name "*.extension", де "extension" – це розширення файлу, яке ви шукаєте.
  3. Чи можу я шукати файли, які були змінені протягом останніх 7 днів?
  4. Так, використовуйте команду знайти. -type f -mtime -7, щоб знайти файли, змінені за останні 7 днів.
  5. Як виключити певні каталоги з пошуку?
  6. Використовуйте опцію -prune із find, щоб виключити каталоги, наприклад, find. -шлях "./exclude_dir" -prune -o -type f -name "*.txt" -print.
  7. Чи можна шукати файли за розміром?
  8. Так, використовуйте знайти. -type f -size +100M, щоб знайти файли розміром понад 100MB.
  9. Як шукати файли з іменами, що відповідають регулярному виразу?
  10. Використовуйте знайти. -type f -regex ".*pattern.*" для пошуку файлів з іменами, що відповідають регулярному виразу.
  11. Чи можу я поєднати кілька критеріїв пошуку?
  12. Так, ви можете комбінувати критерії за допомогою параметрів знайти, наприклад, знайти. -type f -name "*.txt" -size +10M.
  13. Як рекурсивно шукати приховані файли?
  14. Використовуйте знайти. -type f -name "." для пошуку прихованих файлів.
  15. Чи є спосіб перерахувати лише каталоги?
  16. Так, використовуйте знайти. -введіть d для рекурсивного перерахування всіх каталогів.
  17. Як порахувати кількість знайдених файлів?
  18. Додайте | wc -l до команди find, наприклад, find . -type f -name "*.txt" | wc -l.
  19. Чи можу я обмежити глибину пошуку?
  20. Так, використовуйте параметр -maxdepth, наприклад, find. -maxdepth 2 -введіть f, щоб обмежити пошук до 2 рівнів.

Розширені методи рекурсивного пошуку файлів

На додаток до базових методів рекурсивного пошуку файлів, які обговорювалися раніше, існує кілька розширених методів, які можуть покращити ваші можливості пошуку файлів у Linux. Один із таких методів передбачає використання команда в поєднанні з для пошуку файлів, що містять певні текстові шаблони. Наприклад, можна використовувати щоб знайти всі текстові файли, що містять рядок "search_text". Це особливо корисно для розробників і системних адміністраторів, яким потрібно ефективно шукати великі кодові бази або файли журналів.

Іншим потужним інструментом для рекурсивного пошуку файлів є , проста, швидка та зручна альтернатива . поставляється з розумними параметрами за замовчуванням і забезпечує інтуїтивно зрозумілий синтаксис. Наприклад, команда fd "pattern" рекурсивно шукатиме файли, що відповідають шаблону, і за замовчуванням підтримує регулярні вирази. Крім того, швидше ніж у багатьох сценаріях через розпаралелізований обхід файлової системи. Для користувачів, яким потрібні розширені функції пошуку зі зручним інтерфейсом, може бути відмінним вибором.

Останні думки про рекурсивний пошук файлів

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