【问题标题】:Create multiple tar.gz archives from multiple directories从多个目录创建多个 tar.gz 档案
【发布时间】:2016-03-22 01:47:05
【问题描述】:

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

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

我希望能够为/Users/Me/Projects 中的每个存档创建一个tar.gz 存档,其存档与目录同名。

例如,在 Projects 文件夹中,Project1Project2Project3

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

【问题讨论】:

    标签: bash shell sh tar gzip


    【解决方案1】:

    没有find

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

    */ 确保 glob 仅匹配目录,"${dir%/}" 删除目录名称的尾部斜杠。

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

    【讨论】:

    • 感谢您的回答。我有一个快速的问题,如何更改此脚本以将新创建​​的档案输出到原始目录所在的位置之外的地方?我从中创建这些档案的大多数扩展目录都在我的外部硬盘驱动器上,我想将档案放在我的内部硬盘驱动器上。例如,它看起来像for dir in */; do tar -czvf /Users/Username/Archives/"${dir%/}".tar.gz "$dir"; done 吗?
    • @jzg.dev 没错!如果您不确定某个命令的作用,您可以随时在它前面插入一个echo,然后只查看删除它时将执行的命令,而无需实际执行它们:for dir in */; do echo tar ...
    • 感谢您的帮助! :)
    【解决方案2】:

    使用 GNU 查找:

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

    【讨论】:

      【解决方案3】:

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

      #! /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
      

      编辑

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

      【讨论】:

      • 有利于您找到自己的答案,但don't read lines with for
      • 你不必在最后使用sed。如果您使用-print0 | xargs -0 tar ...,那将是一个非常好的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2015-06-14
      相关资源
      最近更新 更多