【问题标题】:How to compress multiple folders, each into its own zip archive?如何压缩多个文件夹,每个文件夹都有自己的 zip 存档?
【发布时间】:2013-12-25 11:39:26
【问题描述】:

所以我想创建一个脚本,使我能够将每个文件夹压缩成自己的 zip 存档,而不是一个大的 zip 文件。

例如,我有一个目录:

+ MyDirectory/
| |
| + Folder_01/
| |
| + Folder_02/
| |
| + Folder_03/
|

当我在MyDirectory 下运行完脚本后,我将拥有MyDirectory 内的每个文件夹的压缩文件:Folder_01.zipFolder_02.zipFolder_03.zip。 我知道一些 BASH,但这是我无法弄清楚的。

如何做到这一点?

亲切的问候。

【问题讨论】:

  • 那么到目前为止你尝试过什么?
  • 嗨@EdHeal,我知道我需要用变量做一些奇怪的 bash for 循环,当涉及到变量和 bash 中的循环时,我被卡住了。但我终于找到了我的问题的答案here。我想我会将代码保存到可执行文件中并将其存储在 bin/ 文件夹下,因为我认为像这样的 bash 脚本只会令人困惑。

标签: linux bash command-line terminal


【解决方案1】:
for i in *
do
[ -d "$i" ] && zip -r "$i.zip" "$i"
done

您浏览所有目录并为每个目录创建 zip。

或者更简洁:

for i in */; do zip -r "${i%/}.zip" "$i"; done

(感谢 damienfrancois 的建议)。

【讨论】:

  • 你可以用for i in */避免[ -d "$i" ] && 部分
  • @damienfrancois:超级提示!谢谢!!
  • 尽管在这种特殊情况下,您必须在之后${i%/}.zip 才能摆脱尾随的/
  • 谢谢!如果将其作为可执行文件存储在 bin/ 目录下,并且对执行压缩操作很有用,那么您可以为目录提供 */ 或为文件提供 *.* 之类的选项,或者如果您只想提供 *.jpeg 之类的选项 compress 。 jpeg 文件。您将如何编写代码以便您只需要键入 f.ex。 compress */,还是compress *.jpeg?更进一步,可以编写脚本,以便您可以提供诸如 -a/--all 之类的选项,用于将所有内容压缩到一个大的 zip 存档中,-e/--each 用于将每个文件压缩到自己的 zip 文件中,等等...谢谢! :)
  • @damienfrancois - Great 1-liner: for i in */; do zip -r "${i%/}.zip" "$i"; done 当我在 windows 10 中的 mobaxterm v11(安装 zip 实用程序后)上进行测试时,它可以工作。谢谢!
【解决方案2】:

如果您需要较小的输出(以较长的过程为代价),请考虑使用xz 算法:

for d in */ ; do
    outName=$d;
    outName=${outName// /\-};
    outName=${outName//[!0-9a-z-]};
    dirName=$d;
    dirName=${dirName//\/}
    tar -c "$dirName" | xz -e > $outName.tar.xz
done

此代码将清理文件夹名称并为当前目录中的每个文件夹生成.tar.xz

【讨论】:

  • 您可能需要添加注释,-e 会显着增加压缩时间,应该或多或少只用于存档。
【解决方案3】:

这里

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

【讨论】:

    【解决方案4】:

    我采用旧的解决方案并返回另一个适用于您驱动器中任何位置的任何目录的好的解决方案

    Bash 中的这段代码

    #!/bin/bash
    
    folderPath=/home/ahmed/test/
    
    for folder in $folderPath*
    do
            folderName=$(basename $folder)
            cd $folderPath && zip -r $folderName.zip $folderName
    done
    

    所以 test 文件夹内的所有文件夹都会被压缩到同一个文件夹中

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2016-05-13
      • 1970-01-01
      相关资源
      最近更新 更多