Как создать архив tar структуры директории

Вопрос или проблема

Я хочу скопировать директории на другой сервер, однако мне не нужно копировать файлы этих директорий. Поэтому я ищу способ создать архив с пустыми директориями.

Вот команда, которая вам нужна:

find . -type d -print0 | tar cf folderstructure.tar --null --files-from - --no-recursion

Она создаёт файл folderstructure.tar с структурой папок без файлов.

Используйте cpio, а не tar для этой задачи. Сначала выполните cd в верхний уровень директории, которую вы хотите скопировать.

find . -type d -print0 | cpio -o -0 > /tmp/archive.cpio

Затем скопируйте /tmp/archive.cpio на ваш удалённый хост. Вы можете сделать это за один шаг:

find . -type d -print0 | cpio -o -0 | ssh user@remotehost "cd targetdir; cpio -i"

Кстати, параметры -print0 и -0 полезны/необходимы, когда имена файлов содержат непечатаемые символы, т.е. символы новой строки.

Проблема tar заключается в том, что он использует текущего пользователя в качестве владельца при создании директорий. Расширяя ответ @Otheus, команда cpio для дублирования желаемой структуры директорий с заранее выбранным владельцем, например, ftpuser и ftpgroup, будет такой:

для сохранения:

find sourcefolder -type d -print0 | cpio -o -0 > ~/folderstructure.cpio

для восстановления:

cd targetfolder
cat ~/folderstructure.cpio | sudo cpio --owner ftpuser.ftpgroup -i

Ответ или решение

Для создания архива только с пустыми каталогами без файлов вам подойдут команды tar или cpio. Я подробно объясню оба этих метода, включая их использование и некоторые дополнительные параметры.

Метод 1: Использование tar

Команда для создания архива с пустыми директориями с помощью tar выглядит следующим образом:

find . -type d -print0 | tar cf folderstructure.tar --null --files-from - --no-recursion

Пояснения к команде:

  • find . -type d -print0 — эта команда находит все директории в текущем каталоге и выводит их с разделителем нулевой длины (что полезно для обработки имен с пробелами и специальными символами).
  • tar cf folderstructure.tar — создает архив folderstructure.tar.
  • --null — указывает tar использовать нулевой байт в качестве разделителя.
  • --files-from - — сообщает tar, что список файлов (в данном случае директорий) будет передан через стандартный ввод.
  • --no-recursion — предотвращает рекурсивное добавление файлов в архив.

Таким образом, команда создаст архив с пустыми директориями.

Метод 2: Использование cpio

Вы также можете использовать cpio, что может быть более гибким в некоторых случаях. Вот пример:

find . -type d -print0 | cpio -o -0 > /tmp/archive.cpio

Пояснения к команде:

  • -o — указывает cpio, что мы хотим создать архив.
  • -0 — позволяет обрабатывать имена файлов с нулевым разделителем.
  • > перенаправляет вывод в файл /tmp/archive.cpio.

Чтобы скопировать архив на удаленный сервер, можно использовать команду:

find . -type d -print0 | cpio -o -0 | ssh user@remotehost "cd targetdir; cpio -i"

Где user@remotehost — это ваш удаленный сервер, а targetdir — каталог, в который вы хотите выполнить восстановление.

Настройка владельца и группы

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

Для сохранения структуры:

find sourcefolder -type d -print0 | cpio -o -0 > ~/folderstructure.cpio

Для восстановления с указанием владельца и группы:

cd targetfolder
cat ~/folderstructure.cpio | sudo cpio --owner ftpuser.ftpgroup -i

Пояснения:

  • В этом случае ftpuser и ftpgroup — это нужные вам имя пользователя и группа, которые будут назначены созданным директориям.

Заключение

Оба метода позволяют создать архив только с директориями, однако cpio может предоставить больше возможностей в управлении владельцем файлов. Выбор между tar и cpio может зависеть от ваших конкретных требований и предпочитаемых методов работы.

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

Капча загружается...