Секрет копирования скрытых файлов в Linux: 3 рабочих способа
Вы когда-нибудь сталкивались с ситуацией, когда скопированная папка в Linux оказывалась пустой, хотя вы точно знали, что в ней есть файлы? Виновниками часто становятся те самые хитрые скрытые файлы, которые начинаются с точки.
Они хранят важные настройки, данные пользователей и конфигурации сайтов. Но стандартная команда копирования с символом '*' их начисто игнорирует! Это не баг, а фича, защищающая систему от хаоса.
Знакомо чувство разочарования? Хорошая новость: эту проблему легко решить. Мы подготовили для вас три четких и проверенных метода, которые заставят команду 'cp' работать так, как вам нужно.
Вы узнаете, как одной короткой командой скопировать абсолютно все содержимое папки, включая самые хитрые скрытые элементы. Мы покажем безопасный синтаксис, который не затронет системные директории и не вызовет непредвиденных последствий.
Перестаньте гадать, почему не копируются ваши конфиги '.htaccess' или настройки bash '.bashrc'. Освойте эти простые приемы и получите полный контроль над файлами в вашей системе.
Готовы навсегда закрыть этот вопрос? Тогда читайте дальше и выбирайте способ, который подходит именно для вашей задачи!
Иногда может возникнуть необходимость скопировать скрытые файлы или папки из одного места в другое. В Linux скрытые файлы характеризуются точкой (.) в начале имени файла. Типичный пример - копирование домашнего каталога пользователя или директории с веб-сайтом, так как эти каталоги часто содержат множество скрытых файлов.
При копировании одного скрытого файла всё работает без проблем. Однако сложности возникают при попытке скопировать несколько файлов с использованием шаблона *. Этот шаблон не учитывает символ точки (.), в результате чего все скрытые файлы исключаются из процесса копирования. Такое поведение было специально разработано, чтобы избежать непреднамеренной рекурсии. Рекурсия могла возникнуть если бы програма пыталась копировать скрытые ссылки на текущую директорию (.) и родительскую директорию (..).
Тем не менее, существуют способы обойти это ограничение. Можно скопировать содержимое папки без использования *. Например, давайте создадим папку app с файлами .htaccess и index.php и папку backup, куда нужно скопировать файлы. Можно использовать ссылку на текущую папку, и тогда cp скопирует всё содержимое, включая скрытые файлы, в нужную директорию:
cp -r app/. backup

В качестве альтернативы можно также явно указать, что вы хотите скопировать содержимое папки, переданной в первом параметре, используя опцию -T:
cp -rT app backup

Эта команда также требует опции -r для рекурсивной обработки папок, поскольку первый параметр указывает на папку, а не на список файлов.
Наконец, если вы хотите скопировать только скрытые файлы из директории, можно использовать следующий синтаксис с символами подстановки:
cp app/.* backup

Однако избегайте добавления опции -r к этой команде. Если её включить, команда попытается скопировать не только указанную директорию, но и все директории выше по иерархии, включая корневой каталог системы, что может привести к нежелательным последствиям.