NetworkAdmin.ru
4.77K subscribers
224 photos
26 videos
2 files
511 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
🌟 Подводные камни при копировании файлов в linux

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

▪️ Базовый пример. Хочется скопировать содержимое одной директории в другую:


cp /dir_a/* /dir_b


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


cp -a /dir_a/* /dir_b


Ключ -a = рекурсия + права доступа + даты + симлинки. В общем, максимально правильное копирование.

▪️ Подводные камни

Звездочка раскрывается в bash. Символ * обрабатывает сама оболочка, а не cp. То есть bash разворачивает список файлов и передаёт их в виде длинной команды:


cp -a /dir_a/file1 /dir_a/file2 ... /dir_b


Если файлов слишком много - можно упереться в ограничение длины команды.

Скрытые файлы теряются. Файлы, начинающиеся с точки (.htaccess, .env и т.п.), по умолчанию не попадут в *. В результате копирование окажется не точным.

Пустая директория = ошибка. Если в исходной папке нет файлов, то * не развернётся, и cp просто вернет ошибку.

▪️ Как сделать правильно. Лучше вообще избегать *, когда речь о копировании директорий. Надежный способ:


cp -aT /dir_a /dir_b


Здесь:

-a - копирование со всеми атрибутами
-T - воспринимать /dir_b как саму директорию назначения, а не поддиректорию внутри неё

Таким образом, копирование отрабатывает корректно: и вложенные каталоги, и скрытые файлы будут на месте.

#linux #cp

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍252🔥1😱1👌1