Создать tar в текущем рабочем каталоге без всего родительского каталога? - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу сохранить каталог (включая сам этот каталог), но мне не нужен родительский каталог, и я хочу сохранить его в текущем рабочем каталоге.

Я использую:

'' 'cd / home / user / directory' ''

'' 'tar -zcvf backup.tar.gz *' ''

, но сохраняет только файлы и папки внутри of / directory, а не / directory как главный каталог tar.

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

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Можно добавить префиксы (и манипулировать именами файлов, путями) в tar-архивах, используя --transform (из man tar):

- transform = EXPRESSION, --xform = EXPRESSION

используйте sed replace EXPRESSION для преобразования имен файлов

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

's,^,directory/,'

, = разделитель, может быть любым, если во всех местах используются одни и те же символы

s = искать и заменять

^ = начало строка

directory/ = текст выбора

По сути, он говорит: «замените начало строки на directory/».

Пример:

→ tree -a .
.
├── dir1
│   └── file3
├── file1
└── file2
→ tar --transform 's,^,directory/,' -zvcf backup.tar.gz *
dir1/
dir1/file3
file1
file2
→ tar tf backup.tar.gz
directory/dir1/
directory/dir1/file3
directory/file1
directory/file2
→ mkdir tmp && cd tmp/
→ tar xf ../backup.tar.gz
→ tree -a .
.
└── directory
    ├── dir1
    │   └── file3
    ├── file1
    └── file2
0 голосов
/ 06 февраля 2020

* (в конце вашей команды tar) расширяется до «всего в текущем каталоге», и все это будет передано в качестве аргументов вашей команде tar. Попробуйте запустить

echo *

, чтобы понять, что я имею в виду.

Вы, вероятно, хотите что-то вроде:

cd /home/user
tar zcvf backup.tar.gz directory
...