Исключить текущий каталог из tar - PullRequest
2 голосов
/ 08 марта 2019

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

./: Already exists
tar: Error exit delayed from previous errors.

Как мне это сделать?Я пробовал флаг --exclude, но это исключает также и содержимое (правильно).Я пытаюсь закодировать это для обеих версий tar для OSX / BSD и GNU.

Контрольный пример:

# Setup
mkdir /tmp/stackoverflow
cd /tmp/stackoverflow
mkdir dir 
touch dir/file

# Create
tar cCf dir dir.tar .

# List contents
tar tf dir.tar

дает

./
./file

, показывая, чтотекущий каталог ./ находится в tar.Это было бы хорошо, но когда я делаю следующее:

mkdir dir2
tar xkfC dir.tar dir2

из-за флага -k, я получаю код выхода 1 и сообщение

./: Already exists
tar: Error exit delayed from previous errors.

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Это делает трюк:

GLOBIGNORE=".:.."
cd dir
tar cf ../dir.tar *

Дополнительный компакт-диск должен заменить использование флага -C, чтобы мы могли использовать глоб.GLOBIGNORE игнорирует текущий каталог, но также неявно устанавливает shopt -s dotglob для включения скрытых файлов.Использование * вместо ./* означает, что в списке tar-файла нет списка ./file, но вместо этого он указан как file.Полный список смол:

file
0 голосов
/ 08 марта 2019

Чтобы исключить текущий каталог, вы можете создать свой архив следующим образом:

tar cf /path/to/dir.tar ./*

используйте ./* вместо ., это не будет соответствовать текущему каталогу (.) и, следовательно, не будет включено в архив

...