Wildcards

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

Список распространённых подстановок:

* - на её месте может быть произвольное количество символов

Пример *bash*

  • bash - да
  • .bash - да
  • aeoubashaoe - да
  • aoeu ba sh aoeao - нет

? - на его месте может быть ровно 1 символ

Пример ?bash?

  • bash - нет
  • .basha - да
  • .basheu - нет

Решим задачу копирования файлов, имена которых начинаются с .bash.

[] - один символ, который указан внутри набора

Пример [abcf]

  • a - да
  • ab - нет, т.к. 2 символа
  • e - нет, т.к. нет такого символа

[!] - один символ, который НЕ входит в набор

[[:class:]] - мы можем оперировать классами символов, а не 1 конкретным занчением. Есть следующие классы:

  • alnum - символы английского алфавита и цифры
  • alpha - символы английского алфавита
  • digit - цифра
  • lower - буквы в нижем регистре
  • upper - буквы в верхнем регистре

Пример [[:alnum:]]ef?

  • bef - не подходит, т.к. 3 символа, а надо 4.
  • 1efa - да
  • left - да

Практика :)

  • Все файлы.
  • Файлы, заканчивающийся буквой g.
  • Файлы, начинающиеся на букву b и заканчивающиеся .txt.
  • Файлы начинающиеся со строки Data и заканчивающиеся любыми 3 символами.
  • Файлы, начинающиеся с символов a, e или x.
  • Файлы, начинающиеся со строки BACKUP, за которой идут ровно 3 числа.
  • Файлы, начинающиеся с заглавной буквы.
  • Файлы, заканчивающиеся буквой в нижнем регистре или цифрами 5, 6 или 8.

Приложения для манипулирования файлами и каталогами

rm - удаление файлов и рекурсивно каталогов

  • -r - режим рекурсивного удаления
  • -i - режим интерактивного удаления
  • -v - показывать результаты
  • -f - не спрашивать подтверждения

rm -rf /

Задачка

Удалить все файлы в интерактивном режиме, которые заканчиваются на цифры 8 или 5.

mkdir - создание пустого каталога

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

  • -p - создавать не только целевой каталог, но также и все каталоги, находящиеся на пути к нему.

mkdir ~/tmp/some/nested/level - не пройдёт, т.к. каталогов на пути к целевому каталогу level не будет.

Задачка

Создайте этот каталог 1 командой.

cp - копировать файлы и каталоги.

Основная проблема при копировании - что ИМЕННО вы ходите сделать.

  • Скопировать файл в каталог?
  • Скопировать каталог в каталог?
  • Скопировать каталог с переименованием?
  • Скопировать файл с переименованием?
  • Скопировать набор файлов и каталогов?

Рассмотрим основные варианты:

  • cp file1 file2 - скопировать содержимое файла file1 в файл file2.
  • cp file1 file2 dir1 - скопировать файлы file1 и file2 в каталог dir1.
  • cp dir1/* dir2 - скопировать все файлы из dir1 в dir2.
  • cp -r dir1 dir2 - скопировать каталог dir1 и поместить копию внутрь каталога dir2.

Аргументы:

  • -r - рекурсивно
  • -i - интерактивно
  • -v - показывать результаты действий
  • -u - только лишь копировать файлы, которых нет в целевом каталоге.
  • -a - копирьвать также и атрибуты файлов.

mv - переместить файл или каталог (переименовать)

Принимает (в целом) такие же аргументы, как и cp. Единственное отличие - нормально работает с каталогами без -r.

ln - создать ссылку на файл.

Есть 2 вида ссылок: жёсткие и мягкие.

Жёсткая ссылка - это связь файла с данными на жёстком диске.

ln file1 file2 - создать новую жёсткую ссылку на file1.

для создания мягкой ссылки используется:

ln -s file2 link

Мягкая ссылка - это файл, содержащий в нутри себя путь к файлу, на который она ссылается.