Работа с файлами
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
Мягкая ссылка - это файл, содержащий в нутри себя путь к файлу, на который она ссылается.