从多个目录创建多个tar.gz存档

时间:2016-03-22 01:47:06

标签: bash shell sh tar gz

我的目录中有一个完整的项目,让我们说/Users/Me/Projects

这个文件夹里面有多个子目录,其中一些子目录甚至更多。

我希望能够在tar.gz中创建每个档案的/Users/Me/Projects档案,其档案与目录的名称相同。

例如,在Projects文件夹中,Project1Project2Project3

我想要的是运行一个脚本来遍历Projects中的目录而不是下面的子目录来创建Project1.tar.gzProject2.tar.gz和{{1 }}

3 个答案:

答案 0 :(得分:2)

使用GNU find:

cd /Users/Me/Projects
find . -maxdepth 1 -mindepth 1 -type d -exec tar -cvzf {}.tgz {} \;

答案 1 :(得分:2)

没有find

for dir in */; do tar -czvf "${dir%/}".tar.gz "$dir"; done

其中*/确保glob只匹配目录,"${dir%/}"从目录名中删除尾部斜杠。

如果有隐藏目录,则/*不匹配;我们也可以使用shopt -s dotglob

答案 2 :(得分:1)

经过一些搜索和一点试验/错误,我想出了这个脚本,以编程方式完成我想要做的事情。

Project3.tar.gz

再次关注我在问题中给出的示例,假设我想在#! /bin/sh for dir in `find . -maxdepth 1 -mindepth 1 -type d | sed 's|./||'` do tar -czvf /Path/To/Place/Created/Archives/$dir.tar.gz /Path/To/Directories/$dir; done 文件夹中创建存档,脚本将如下所示。

Documents

修改

经过一些进一步的研究,Benjamin W.给出的答案似乎是最直接的方法。我希望找到一种方法来从新创建的存档名称中删除空格,以避免在其他文件系统上出现任何可能的问题,虽然我描述的方法确实剥离了空白区域,但它仍然遇到了一些障碍。