Не создавайте 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
.
person
Jonathan Leffler
schedule
06.09.2010