Не создавайте tar-файл в каталоге, который вы собираете:
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 ..
никогда не было альтернативного значения.)
Один комментарий в обсуждении гласит:
Мне [...] нужно исключить верхний каталог, а мне [...] нужно поместить tar в базовый каталог.
Первая часть комментария не имеет особого смысла - если файл tar содержит текущий каталог, он не будет создан при извлечении файла из этого архива, потому что, по определению, текущий каталог уже существует (за исключением очень странных обстоятельств ).
Со второй частью комментария можно справиться одним из двух способов:
- Либо: создайте файл в другом месте -
/tmp
это одно из возможных мест - а затем переместите его обратно в исходное место после его завершения.
- Или: если вы используете GNU Tar, воспользуйтесь
--exclude=workspace.tar.gz
опцией. Строка после символа =
- это образец - это самый простой образец - точное совпадение. Возможно, вам потребуется указать, работаете --exclude=./workspace.tar.gz
ли вы в текущем каталоге вопреки рекомендациям; вам может потребоваться указать, работаете --exclude=workspace/workspace.tar.gz
ли вы на один уровень выше, как предлагается. Если вам нужно исключить несколько файлов tar, используйте ' *
', как в --exclude=./*.gz
.