Не создавайте архивный файл в каталоге вы упаковывали:
tar -czf /tmp/workspace.tar.gz .
делает трюк, за исключением того, что будет извлекать файлы всей текущей директории при распаковке. Лучше сделать:
cd ..
tar -czf workspace.tar.gz workspace
или, если вы не знаете имя каталога, вы были:
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
(Это предполагает, что вы не следовали симлинкам, чтобы добраться туда, где вы есть и что оболочка не пытается угадать вас, перепрыгивая назад через символическую ссылку - bash
не заслуживает доверия в этом отношении. Если вам нужно беспокоиться об этом, используйте cd -P ..
, чтобы сделать физический каталог изменений. Глупо, что это не поведение по умолчанию в моем представлении - запутанное, по крайней мере, для тех, для кого cd ..
никогда не было альтернативного значения.)
Один комментарий в обсуждении говорит:
I [...] нужно исключить верхний каталог, и я [...] нужно поместить смолу в основной каталог.
В первой части комментария нет смысла - если файл tar содержит текущий каталог, он не будет создан при извлечении файла из этого архива, потому что по определению текущий каталог уже существует (за исключением очень странных обстоятельств).
Вторая часть комментария может быть решена одним из двух способов:
- Либо: создать файл где-то еще -
/tmp
одно возможное место - и затем переместить его обратно в исходное место после он завершен.
- Или: если вы используете GNU Tar, используйте опцию
--exclude=workspace.tar.gz
. Строка после =
является шаблоном - примером является простейший шаблон - точное совпадение. Возможно, вам потребуется указать --exclude=./workspace.tar.gz
, если вы работаете в текущем каталоге вопреки рекомендациям; вам может потребоваться указать --exclude=workspace/workspace.tar.gz
, если вы работаете на одном уровне, как было предложено. Если у вас есть несколько tar-файлов для исключения, используйте '*
', как в --exclude=./*.gz
.
Может быть, это Ques принадлежит к суперпользователю? –