Mic*_*cha 74 linux bash design-patterns tar
我尝试tar.gz一个目录并使用
tar -czf workspace.tar.gz *
Run Code Online (Sandbox Code Playgroud)
生成的tar包含.svn
子目录中的目录,但不包含在当前目录中(因为*
在将其传递给tar之前,只扩展为'visible'文件
我试过了
tar -czf workspace.tar.gz .
相反,但后来我得到一个错误,因为'.' 在阅读时发生了变化:
tar: ./workspace.tar.gz: file changed as we read it
Run Code Online (Sandbox Code Playgroud)
是否有一个技巧,以*
匹配目录中的所有文件(包括点前缀)?
(在Linux SLES-11上使用bash(2.6.27.19)
Jon*_*ler 61
不要在要打包的目录中创建tar文件:
tar -czf /tmp/workspace.tar.gz .
Run Code Online (Sandbox Code Playgroud)
诀窍,除了它将在解压缩时提取当前目录中的文件.更好:
cd ..
tar -czf workspace.tar.gz workspace
Run Code Online (Sandbox Code Playgroud)
或者,如果您不知道您所在目录的名称:
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
Run Code Online (Sandbox Code Playgroud)
(这假设您没有按照符号链接到达您所在的位置,并且shell不会通过向后跳过符号链接来猜测您 - bash
在这方面不值得信任.如果您不得不担心,用cd -P ..
做物理变化目录愚蠢的,这不是我认为的默认行为-混乱,至少,对于那些对他们来说cd ..
,从来没有任何替代的意义)
讨论中的一条评论说:
我[...]需要排除顶级目录,我需要将tar放在基目录中.
注释的第一部分没有多大意义 - 如果tar文件包含当前目录,则从该存档中提取文件时不会创建它,因为根据定义,当前目录已存在(除非在非常奇怪的情况下) ).
评论的第二部分可以通过以下两种方式之一来处理:
/tmp
是一个可能的位置 - 然后在完成后将其移回原始位置.--exclude=workspace.tar.gz
选项.后面的字符串=
是一个模式 - 示例是最简单的模式 - 完全匹配.您可能需要指定--exclude=./workspace.tar.gz
您是否在当前目录中工作而不是建议; 您可能需要指定--exclude=workspace/workspace.tar.gz
是否按照建议操作一个级别.如果要排除多个tar文件,请使用' *
',如--exclude=./*.gz
.rkh*_*rov 43
如果你真的不想在tarball中包含top目录(这通常是个坏主意):
tar czf workspace.tar.gz -C /path/to/workspace .
Run Code Online (Sandbox Code Playgroud)
Veg*_*ger 29
有几个步骤:
*
由.
包括隐藏的文件.--exclude=workspace.tar.gz
可以使用它来排除存档本身.tar: .: file changed as we read it
尚未创建存档时防止错误,请确保存在(例如,使用touch
),因此--exclude与存档文件名匹配.(它不匹配文件不存在)结合这导致以下脚本:
touch workspace.tar.gz
tar -czf workspace.tar.gz --exclude=workspace.tar.gz .
Run Code Online (Sandbox Code Playgroud)
emp*_*ing 17
在目录中想压缩(当前目录)试试这个:
tar -czf workspace.tar.gz . --exclude=./*.gz
Run Code Online (Sandbox Code Playgroud)
您可以通过返回目录并执行以下操作来包含隐藏目录:
cd ..
tar -czf workspace.tar.gz workspace
Run Code Online (Sandbox Code Playgroud)
假设你想要gzip的目录叫做workspace.
您可以.
使用--exclude
以下方法修复表单:
tar -czf workspace.tar.gz --exclude=workspace.tar.gz .
Run Code Online (Sandbox Code Playgroud)
更新:我为 OP 的评论添加了一个修复程序。
tar -czf workspace.tar.gz .
Run Code Online (Sandbox Code Playgroud)
确实会改变当前目录,但为什么不把文件放在其他地方呢?
tar -czf somewhereelse/workspace.tar.gz .
mv somewhereelse/workspace.tar.gz . # Update
Run Code Online (Sandbox Code Playgroud)
还有另一种解决方案,假设文件夹中的项目数量并不大,并且假设所有名称都不包含 shell 解释为分隔符(空格)的字符:
tar -czf workspace.tar.gz `ls -A`
Run Code Online (Sandbox Code Playgroud)
(ls -A
打印普通文件和隐藏文件,但不打印“.”和“..” ls -a
。)
归档时间: |
|
查看次数: |
200944 次 |
最近记录: |