不要在要打包的目录中创建tar文件:
tar -czf /tmp/workspace.tar.gz .
可以做到这一点,除了在您解压缩时会在当前目录中提取所有文件。最好做:
cd ..
tar -czf workspace.tar.gz workspace
或者,如果您不知道所在目录的名称,请执行以下操作:
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
(这是假设您没有遵循符号链接来到达您所在的位置,并且shell不会尝试通过符号链接向后跳来猜测您的情况-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
。