如何仅压缩多个子目录下的文件?

如何仅压缩多个子目录下的文件?

我有一个文件夹working,它的结构是这样的 -

working/
  100/
      1/
      2/
      3/
  200/
      1/
      2/
      3/
  300/
      1/
      2/
      3/

每个1 2 3文件夹都有大约 1000 个文件。

我想将1 2 3文件夹下的文件分别压缩。 zip 不应包含其顶级目录。将拉链放在任何地方。例如,如果文件夹下有 files和foo1,那么它应该形成一个 zip ,其中应该只有 foo 文件。foo2foo311

答案1

一个简单的循环就可以解决问题。

cd working
for dir in */*/; do
  [ -e "$dir/files.zip" ] ||   # skip directories where the zip already exists
  ( cd -- "$dir" && zip -r files.zip .)
done

请注意,zip 足够智能,可以在该目录中递归时跳过正在构建的 zip 文件。其他一些存档程序会尝试将正在构建的存档填充到正在构建的存档中。

相关内容