Расширения для работы с файлами в Bash

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

Однако при работе с большим количеством файлов нам бывает сложно (и мы не хотим) печатать всё, что есть в названиях файлов. Для решения этой задачи мы можем воспользоваться помощью Bash, чтобы указать только интересующую нас часть, а он уже сам преобразует эту часть в полное наименование файла.

Для описания данной методики в английском языке используются слова wildcards и globbing.

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

  • * - любые символы.
  • ? - 1 любой символ.
  • [chars] - 1 символ, который совпадет с символом внутри квадратных скобочек.
  • [!chars] - 1 символ, который НЕ совпадает с символами внутри квадратных скобочек.

Для описания символов можно исползовать не конкретный символ, а класс, к которому этот символ относится. Для описания класса используется: [:class:].

Существуют следующие классы:

  • alnum - символы алфавита и цифры.
  • alpha - символы алфавита
  • digit - цифры
  • lower - символы алфавита в нижнем регистре
  • upper - символы алфавита в вернем регистре.

Для использования класов необходимо написать немного сложную конструкцию. Рассмотрим следюущую задачу: описать имена файлов, которые начинаются с 2 цифр, после которых идут буквы в вернем регистре (минимум 1).

[[:digit:]][[:digit:]][[:upper:]]*

Разберём шаблоны

  • * - Все файлы
  • g* - Файлы, начинающиеся с символа g.
  • b*.txt
  • Data??? - Файлы, длина имени которых равна 7. Начинаются с Data.
  • [abc]*
  • BACKUP.[0-9][0-9][0-9]
  • *[[:lower:]123]
  • *.jpg

Приложения для работы с файлами и каталогами

mkdir

mkdir - позволяет создать каталоги.

mkdir dir2 dir3 dir4 - все каталоги будут созданы.

cp

cp - приложение, позволяющее копировать файлы и каталоги.

При работе с cp есть проблема: каталог - это файл.

  1. Копируем файл в каталог.

cp /path/to/file /path/to/directory

В каталоге /path/to/directory появится файл, который называется file и содержит копию данных из файла /path/to/file

  1. Копируем файл в файл.

cp /path/to/file /path/to/directory/data

Появится файл /path/to/directory/data, который содержит в себе содержимое файла /path/to/file.

  1. Копируем несколько файлов

cp file1 file2 file3 /path/to/directory/

  1. Копируем директорию в директорию

cp -r /path/to/dir1 /path/to/dir2

  • Если dir2 существует, то внутри появится каталог dir1.
  • Если dir2 не существует, то содержимое каталога dir2 будет соответствовать каталогу dir1.

Какие есть полезные ключи?

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

Рассмотрим пример

  • cp dir1/* dir2 - скопировать файлы из каталога dir1 в каталог dir2, но не копировать директории.
    • Если в dir1 1 файл, а dir2 не существует, то dir2 - будет файлом с содержимым файла из каталога dir1.

mv

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

По сигнатуре mv совпадает с cp.

mv - это также и переименовать файл. mv file1 file2 - простое переименование из file1 в file2.

rm

Внимание! При удалении файлов они удаляются на совсем. Они не перемещаются в “корзину” для будущей очистки.

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

rm в качестве аргументов принимает список файлов, которые необходимо удалить.

Важные аргументы:

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

Варианты использования:

  • rm file1 - удалить файл
  • rm -i file1 - спроисть перед удалением файла.
  • rm -r file1 dir1 - удалить файл и каталог со всем содержимым
  • rm -rf file1 dir1 - удалить всё неспрашивая.

Ранее в интернетах для решения проблем новичков с Linux предлагали выполнить: rm -rf /.

Стоит обратить внимание на * с приложенем rm. Если вы написили rm -i * .html - это удалит не все .html-файлы, а просто все файлы.

Ссылки

В файловых системах Linux есть концепция ссылок на файлы. Ссылки позволяют решить ряд полезных задач:

  • Обеспечить доступ к файлу по удобному пути.
  • Обеспечить выбор файла в зависимости от критерия. Т.е. у нас задачи 1 файла могут выполнять несколько и с помощью ссылок мы можем перелкючаться между реализациями файла в зависимости от задачи. Понятно, что я говорю в основном про исполняемые файлы.
  • Обеспечить возможность динамической конфигурации приложения.

Типы ссылок:

  • Жёсткие ссылки
  • Смволические ссылки

Жёсткие ссылки работают на уровне 1 файловой системы и с точки зрения пользователя представляют собой обычные файлы. Только с точки зрения ФС они являются указателями на одну и туже область памяти на жёстком диске.

Жёсткие ссылки могут бысть созданы только для файлов, но не для каталогов. И они не могут выйти за рамки 1 файловой системы. Т.е. мы не можем сделать жёсткую ссылку с жёсткого диска компьютера на флеш-носитель.

Символическая ссылка - это файл, содержащий в себе путь к другому файлу на файловой системе. Т.е. символическая ссылка - это файл с специальными данными. Однако ОС рассматривает данный файл как связь с другой точкой файловой системы. И все операции (чтения, записи), которые вы делаете над символичской ссылкой выполняются над целевым файлом. Операции создания и уничтожения выполняются над самой ссыкой.

ln

ln - приложение, позволяющее создавать ссылки.

ln -s <ПУТЬ К="" НАЗНАЧЕНИЮ=""> <ПУТЬ К="" ССЫЛКЕ="">

  • -s - создавать символические ссылки
  • Путь к назначнию будет записан внутрь ссылки. Причём если он некорректный, то ошибки не будет.