我尝试tar.gz一个目录并使用
tar -czf workspace.tar.gz *生成的tar包括子目录中的.svn目录,但不包括当前目录中的目录(因为*在传递给tar之前只展开为‘可见’文件
我试过了
tar -czf workspace.tar.gz .,但我收到了一个错误,因为‘’在阅读过程中发生了变化:
tar: ./workspace.tar.gz: file changed as we read it有没有什么技巧可以让*匹配一个目录中的所有文件(包括点前缀)?
(在Linux SLES-11上使用bash (2.6.27.19) )
发布于 2010-09-07 00:01:33
不要在打包的目录中创建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文件包含当前目录,那么当您从该归档文件中提取文件时,将不会创建它,因为根据定义,当前目录已经存在(除非在非常奇怪的情况下)。
评论的第二部分可以通过以下两种方式之一进行处理:
GNU :在其他地方创建文件- /tmp是一种可能的位置-然后在文件被complete.
--exclude=workspace.tar.gz选项。=后面的字符串是一个模式--本例是最简单的模式--一个精确匹配。如果您在与建议相反的情况下在当前目录中工作,则可能需要指定--exclude=./workspace.tar.gz;如果您正在按照建议进行上一级工作,则可能需要指定--exclude=workspace/workspace.tar.gz。如果要排除多个tar文件,请像在--exclude=./*.gz.
中那样使用'*‘
发布于 2016-09-19 17:21:38
有几个步骤需要采取:
*替换为.也可以包含隐藏文件。--exclude=workspace.tar.gz排除存档本身。tar: .: file changed as we read it错误,请确保它存在(例如使用touch),以便--将这些结果合并到以下脚本中:
touch workspace.tar.gz
tar -czf workspace.tar.gz --exclude=workspace.tar.gz .发布于 2010-09-06 21:30:28
如果你真的不想在tarball中包含top目录(这通常不是一个好主意):
tar czf workspace.tar.gz -C /path/to/workspace .https://stackoverflow.com/questions/3651791
复制相似问题