【问题标题】:Command to Bulk Compress All Files / Folders Under a Directory批量压缩目录下所有文件/文件夹的命令
【发布时间】:2009-09-20 20:00:52
【问题描述】:

我正在寻找一个命令,该命令将分别压缩目录中的每个文件夹,每个存档的名称反映原始文件夹名称。我知道

tar czvf example.tar.gz example/

将压缩整个文件夹。但是,我还没有找到批量存档的命令。有这样的命令吗?

【问题讨论】:

  • 是的,我在你的未来看到了 find、xargs 和 sed。

标签: command-line command archive bulk compression


【解决方案1】:
for f in `find -mindepth 1 -maxdepth 1 -type d`; do
    tar -czf $f.tar.gz $f
done

【讨论】:

  • 谢谢!正是我想要的。
  • 好的,还有一个问题。如果我想压缩到 bzip2,完整的命令是什么?
【解决方案2】:
find -mindepth 1 -maxdepth 1 -type d -exec tar czf {}.tar.gz {} \;

请注意,我使用了-maxdepth 1

考虑目录结构:

.
|-- a
|   `-- x
|-- b
`-- c

没有-maxdepth 1,您将获得a.tar.gza/x.tar.gza.tar.gz 将包含 x 和其中的所有文件; a/x.tar.gz 将包含 x 及其文件。但这会将 x 内的项目存储两次,假设这不是目标。

更新也使用-mindepth 1,因为在example/之外运行时,也会创建example.tar.gz

更新 ...对于 bzip2:

find -mindepth 1 -maxdepth 1 -type d -exec tar cjf {}.tar.bz2 {} \;

【讨论】:

  • 如果没有-mindepth 1,会不会为当前目录创建存档?
  • 我也是这么想的,但是当我测试它时,我没有看到这种情况发生。
  • 啊,但如果你在“example/”中执行它,它不会,如果你不这样做,它会。会更新。
  • 是否可以调整命令以使用 bzip2 进行压缩?
  • @opello:既然 find 命令是在寻找 '.',它不会创建一个名为 '..tar.gz' 的文件吗? ls 默认情况下不会显示。
【解决方案3】:

好的,这是我想出的最后一个命令来存档,然后用 bzip2 压缩以获得最大压缩率

find -mindepth 1 -maxdepth 1 -type d -exec tar cjf '{}'.tar.bz2 '{}' \;

谢谢大家!

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2018-07-03
    相关资源
    最近更新 更多