Найти в Дзене
Сисадмин

Глоббинг в Linux (globbing)

Оглавление
globbing в linux
globbing в linux

В Bash и других Unix-подобных оболочках символы и шаблоны, такие как *, {}, [], ? и другие, используются для расширения путей (так называемое globbing). Эти шаблоны помогают эффективно работать с файлами и директориями, выполняя операции над множеством файлов одновременно. Вот как можно использовать эти символы в различных сценариях:

Символы и их использование

1. * (звездочка)

  • Пример 1: Список всех файлов и директорий в текущем каталоге
ls *
  • Звездочка * заменяет любое количество любых символов. Эта команда выведет все файлы и директории в текущем каталоге.
  • Пример 2: Поиск файлов с определенным расширением
ls *.txt

Эта команда выведет все файлы с расширением .txt в текущем каталоге.

  • Пример 3: Копирование всех файлов из одного каталога в другой
cp /source_dir/* /destination_dir/

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

2. ? (вопросительный знак)

  • Пример 1: Поиск файла с одним конкретным символом
ls file?.txt

В этом примере file?.txt совпадает с любым файлом, имя которого начинается с file, имеет один символ между file и .txt, например, file1.txt или fileA.txt.

  • Пример 2: Переименование файлов с одним символом на конце
mv report?.pdf archive/

Эта команда переместит файлы, такие как report1.pdf или reportA.pdf, в директорию archive/.

3. [] (квадратные скобки)

  • Пример 1: Поиск файлов с одним из нескольких символов
ls file[123].txt

В этом примере file[123].txt совпадает с file1.txt, file2.txt или file3.txt.

  • Пример 2: Поиск файлов, начинающихся с определенной буквы
ls file[a-z].txt

Эта команда выведет файлы с именами вида filea.txt, fileb.txt, и так далее, до filez.txt, если они есть.

  • Пример 3: Поиск файлов, не содержащих определенные символы
ls file[!0-9].txt

Команда найдет файлы, имя которых начинается с file, за которым следует нецифровой символ, например, filea.txt или filex.txt, но не file1.txt или file9.txt.

4. {} (фигурные скобки)

  • Пример 1: Создание нескольких директорий за один раз
mkdir {dir1,dir2,dir3}

Эта команда создаст три директории: dir1, dir2, и dir3.

  • Пример 2: Перемещение файлов с разными расширениями
mv file.{txt,pdf} /new_directory/

Эта команда переместит файлы file.txt и file.pdf в директорию /new_directory/.

  • Пример 3: Генерация последовательных имен файлов
touch file{1..5}.txt

Создает файлы file1.txt, file2.txt, file3.txt, file4.txt, и file5.txt.

5. ** (две звездочки)

  • Пример 1: Поиск файлов в поддиректориях
ls **/*.txt

Эта команда найдет все файлы с расширением .txt в текущем каталоге и всех его поддиректориях. Для использования ** может потребоваться включение опции globstar в Bash.

shopt -s globstar

6. ! (не равно)

  • Пример 1: Исключение файлов по шаблону
ls !(file1.txt)

Показывает все файлы в текущем каталоге, кроме file1.txt. Для использования ! необходимо включить расширение extglob в Bash.

shopt -s extglob

Комбинирование шаблонов

  • Пример 1: Удаление всех файлов с несколькими расширениями
rm *.{jpg,png,gif}

Удаляет все файлы с расширениями .jpg, .png и .gif.

  • Пример 2: Переименование файлов с разными шаблонами
mv file[1-3].txt /backup/

Перемещает файлы file1.txt, file2.txt и file3.txt в директорию /backup/.

  • Пример 3: Просмотр содержимого всех файлов в поддиректориях
cat **/*.log

Показывает содержимое всех файлов с расширением .log в текущем каталоге и его поддиректориях.

Такие спецсимволы и шаблоны позволяют гибко и эффективно работать с файлами и директориями в Bash. Знание их применения поможет вам ускорить выполнение команд и упрощает работу с большими группами файлов.