存档所有从源代码目录中的文件到一个xyz.gz文件并移动,使用UNIX shell脚本

存档所有从源代码目录中的文件到一个xyz.gz文件并移动,使用UNIX shell脚本

问题描述:

要求到目标目录:使用UNIX shell脚本成的.gz格式不目录结构的归档文件存档所有从源代码目录中的文件到一个xyz.gz文件并移动,使用UNIX shell脚本

我使用下面的命令

tar -C source_dir -zcvf target_dir/xyz.gz source_dir 

例如:

tar -C /home/log -zcvf /home/archive/xyz.gz /home/log 

这里xyz.gz包含/home/log

它创建了xyz.gz文件来维护目录结构。我只想要文件没有目录结构存档。

你可以试试下面的命令:

$ cd /home/log 

$ tar zcvf /home/archive/xyz.gz * 
+0

请注意,一行中的四个空格前缀呈现代码块中的控制台I/O,请参阅我的编辑。 – halfer

+0

谢谢 这是目前工作的目录意味着从“/ home/log”。 如果我想从其他路径运行此命令,如“/ home/usr/script” –

+0

需要更改一次。我不想为所有日志文件创建单个存档文件,而是要为所有日志创建单独的.gz文件。我怎样才能做到这一点? –

可以使用--transform选项脱光使用sed espression从存档文件名中的开头的路径组件:

tar -C /home/log -zcvf /home/archive/xyz.gz --transform 's_.*/__' /home/log 

然而,这也将为每个遇到的目录写一个条目。如果你不希望出现这种情况,你可以使用find只查找常规文件,并将它们传递给tar的标准输入这样的:

cd /home/log 
find -type f -print0 | tar -zcvf /home/archive/xyz.gz --transform 's_.*/__' --verbatim-files-from --null -T - 

注意,这可能会在tar归档文件创建具有相同名称的多个条目,如果具有相同名称的文件存在于不同的子目录中。另外,您应该使用传统的.tar.gz.tgz扩展名来存储压缩的tar归档文件。