代码之家  ›  专栏  ›  技术社区  ›  jzg.dev

创建多个tar。来自多个目录的gz存档

  •  3
  • jzg.dev  · 技术社区  · 10 年前

    我有一个目录,里面有很多项目 /Users/Me/Projects .

    该文件夹内部有多个子目录,其中一些子目录中甚至有更多子目录。

    我希望能够创建 tar.gz 归档中的每个归档 /用户/我/项目 ,其存档将与目录同名。

    例如,在 Projects 我的文件夹, Project1 , Project2 Project3 .

    我想要的是运行一个脚本来遍历 项目 而不是要创建的子目录 Project1.tar.gz , Project2.tar.gz Project3.tar.gz .

    3 回复  |  直到 10 年前
        1
  •  3
  •   Benjamin W.    6 年前

    没有 find :

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

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

    如果存在隐藏目录,则它们不匹配 */ ; 也要买这些,我们可以用 shopt -s dotglob .

        2
  •  2
  •   Cyrus    10 年前

    使用GNU查找:

    cd /Users/Me/Projects
    find . -maxdepth 1 -mindepth 1 -type d -exec tar -cvzf {}.tgz {} \;
    
        3
  •  1
  •   jzg.dev    10 年前

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

    #! /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 文件夹

    #! /bin/sh
    
        for dir in `find . -maxdepth 1 -mindepth 1 -type d | sed 's|./||'`
        do
            tar -czvf /Users/Me/Documents/$dir.tar.gz /Users/Me/Projects/$dir;
        done
    

    编辑

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

    推荐文章