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