Как заархивировать несколько папок, некоторые рекурсивно, некоторые нерекурсивно

Как заархивировать несколько папок, некоторые рекурсивно, некоторые нерекурсивно

У меня есть список каталогов. Некоторые из каталогов требуют рекурсивного тарирования, другие требуют только файл, который существует в этом каталоге, без подкаталогов: Используя каталог/файлы ниже в качестве примера, как будет выглядеть моя команда tar:

/tmp/dir1/ - Recursively
/tmp/dir2/ - Only the files that exist in that directory, no subdirectories
/tmp/dir3/file1 - Only this single file.

решение1

Вот что у меня получилось:

Сначала структура каталогов, которую я использую в качестве примера:

$ find dir1 dir2 dir3 -print
dir1
dir1/file1
dir1/file2
dir1/sub_dir1
dir1/sub_dir1/file1
dir2
dir2/file1
dir2/file2
dir2/sub_dir1
dir2/sub_dir1/file1
dir3
dir3/file1
$

Далее мое решение, которое состоит из трех команд:

Первая команда:

tar cvf archive.tar dir1

Довольно стандартно. Давайте разберем:

  • c- Создавать
  • v- Многословный (давайте посмотрим, что происходит)
  • f- желаемое имя файла, в нашем случаеarchive.tar
  • archive.tar- этот фактический аргумент к нашему fпереключателю
  • dir1- что мы хотим на самом деле покрыть гудроном

Вторая команда:

find dir2 -maxdepth 1 -type f -print0 | xargs -0 tar rvf archive.tar

Давайте разберем это:

  • find dir2- Где мы хотим найти для поиска.
  • -maxdepth 1- Не опускайтесь ниже глубины 1 (оставайтесь в корне dir2)
  • -type f- Поиск файлов
  • -print0- Не выводите символ новой строки в конце, вместо этого используйте нулевой символ. Это помогает нам, если find находит файлы с пробелами.
  • | xargs -0- Стандартный ввод, который мы нашли с помощью команды find, помещается сюда для выполнения с учетом нашихprint0
  • tar rvf- Единственный новый переключатель здесь - r. Это наша опция добавления. Она добавляется к нашему archive.tarв конце. Не путать с опцией A, которая относится только к добавлению дополнительных архивов ( .tar-s).
  • archive.tar- Tar, к которому мы хотим присоединиться.

    В конце этой команды используется наш stdinput. Например:archive.tar <stdinput>

Третья команда:

tar rvf archive.tar dir3/file1

Добавить в archive.tarодин файл ( file1) из dir3.

И наконец, как выглядит tar после создания. Опция tиспользуется для распечатки его содержимого.

$ tar tvf archive.tar
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file2
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file2
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir3/file1
$

Связанный контент