Как скопировать папку целиком в Linux (cp -r) и не забыть скрытые файлы (.env)
Почему сайт ломается после обычного копирования папки
Начинающий администратор переносит сайт или проект на сервере командой cp -r /var/www/site1/* /var/www/site2/, запускает проект, но сайт падает с фатальной ошибкой конфигурации. Причина кроется в маске *: в Linux стандартная звездочка копирует только видимые файлы, напрочь игнорируя скрытые файлы, чьи имена начинаются с точки (например, файлы окружения .env, конфиги веб-сервера .htaccess, ключи и репозитории .git).
Шпаргалка по флагам утилиты cp
| Команда | Что копирует | Сохранение прав и владельцев |
|---|---|---|
cp file1 file2 | Только один одиночный файл | Создает новый файл с правами текущего пользователя |
cp -r dir1 dir2 | Папку и подпапки (Recursive) | Сбрасывает дату создания и права под текущего юзера |
cp -a dir1 dir2 | Идеальный клон (Archive): папки, скрытые файлы, симлинки | 100% сохранение всех оригинальных прав, дат и владельцев |
Правильные способы копирования папок со скрытыми файлами
Способ 1: Идеальное клонирование папки (команда cp -a)
Флаг -a (Archive) — самый надежный способ резервного копирования или переноса структуры папок:
sudo cp -a /var/www/my_project/. /var/www/new_project/Секрет: точка в конце исходного пути (/.) указывает утилите скопировать абсолютно все содержимое, включая скрытые файлы .env, не создавая лишнюю вложенную папку внутри целевого каталога.
Способ 2: Стандартное рекурсивное копирование (cp -r)
Скопируем папку my_folder со всем деревом файлов в директорию /opt/backup/:
cp -rv my_folder /opt/backup/(Флаг -v будет наглядно выводить список каждого скопированного файла в консоль).
Шаг 3: Проверка наличия скрытых файлов (.env) в новом месте
Убедитесь, что скрытые файлы скопировались успешно, используя команду ls с флагом -a (All):
ls -la /var/www/new_project/В списке должны присутствовать файлы .env, .htaccess и служебные каталоги.
Типовые ошибки администраторов
- Копирование симлинков как тяжелых файлов: Обычный флаг
-rпри обнаружении символической ссылки копирует реальный файл, на который она указывает, что может раздуть размер папки в сотни раз. Флаг-aкопирует сами ярлыки ссылок без раздувания данных. - Забытые права владельца (chown): Если вы скопировали папку через
sudo cp, все новые файлы получат владельцаroot:root. Веб-сервер Nginx/Apache не сможет записать туда кэш и сессии. Решение: верните права веб-пользователю:sudo chown -R www-data:www-data /var/www/new_project.
ITSTM выполнит бесшовную синхронизацию данных утилитой rsync по защищенному SSH-каналу без остановки рабочих сервисов и баз данных.
Частые вопросы (FAQ)
В чем разница между командами 'cp -r folder1 folder2' и 'cp -a folder1 folder2'?
Флаг -r копирует только структуру и файлы, сбрасывая владельцев и временные метки под текущего пользователя. Флаг -a (Archive) выполняет точный слепок: сохраняет права chmod, владельцев chown, симлинки и даты изменения.
Как скопировать только скрытые файлы из одной папки в другую?
Используйте шаблон dot-файлов: cp /path/src/.* /path/dest/ 2>/dev/null (перенаправление ошибок скроет предупреждения о системных ссылках '.' и '..').
Как принудительно перезаписать существующие файлы без запроса подтверждения?
Если в системе настроен алиас на 'cp -i', выполните команду через обратный слеш, чтобы проигнорировать алиас: \cp -rf src/. dest/
Какая утилита лучше всего подходит для копирования огромных директорий с прогресс-баром?
Для больших объемов данных лучше использовать утилиту rsync: rsync -avP /папка_источник/ /папка_назначение/.