🎩 Bash: Как копировать скрытые файлы.

Иногда может возникнуть необходимость скопировать скрытые файлы или каталоги из одного места в другое. В GNU/Linux скрытые файлы обозначаются точкой .(точкой) в начале имени файла. Типичный пример — копирование домашнего каталога пользователя или каталога с веб-сайтом, так как эти каталоги часто содержат множество скрытых файлов.

При копировании одного скрытого файла всё работает без проблем. Однако сложности возникают при попытке скопировать несколько файлов с использованием шаблона * (звездочка). Этот шаблон не учитывает символ . (точка), в результате чего все скрытые файлы исключаются из процесса копирования.

Такое поведение было специально разработано, чтобы избежать непреднамеренной рекурсии. Рекурсия могла возникнуть если бы программа пыталась копировать скрытые ссылки на текущий каталог ./ (точка) и родительский каталог ../ (две точки).

Существуют способы обойти это ограничение. Можно скопировать содержимое каталога без использования *.

Например, создадим каталог app с файлами .htaccess и index.php:

$ mkdir /tmp/app
$ touch /tmp/app/{.htaccess,index.php}
$ ls /tmp/app -la

Ответ:

И каталог backup, куда нужно скопировать файлы:

$ mkdir /tmp/backup
$ ls /tmp/backup -la

Ответ:

Можно использовать ссылку на текущий каталог, и тогда cp скопирует всё содержимое, включая скрытые файлы, в нужный каталог:

$ cp -r /tmp/app/. /tmp/backup
$ ls /tmp/backup -la

Ответ:

Удалим файлы .htaccess и index.php из каталога /tmp/backup:

$ rm /tmp/backup/{.*,*}
$ ls /tmp/backup -la

Ответ:

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

$ cp -rT /tmp/app/ /tmp/backup
$ ls /tmp/backup -la

Ответ:

Эта команда также требует опции -r для рекурсивной обработки каталогов, поскольку первый параметр указывает на каталог, а не на список файлов.

Удалим файлы .htaccess и index.php из каталога /tmp/backup:

$ rm /tmp/backup/{.*,*}
$ ls /tmp/backup -la

Если нужно копировать только скрытые файлы из каталога, можно использовать следующий синтаксис с символами подстановки:

$ cp /tmp/app/.* /tmp/backup
$ ls /tmp/backup -la

Ответ:

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

Оригиналы источников информации.

  1. https://losst.pro «Как копировать скрытые файлы в Linux».
image_printСКАЧАТЬ ВЕРСИЮ ДЛЯ ПЕЧАТИ

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *