bash:查找并压缩文件夹的所有子文件夹

bash:查找并压缩文件夹的所有子文件夹

如何找到文件夹的所有子文件夹并分别压缩它们?

文件夹结构

./folder  
   -subfolder_1  
   -subfolder_2   
   -subfolder_3 

预期结果:

./folder
   -subfolder_1.zip
   -subfolder_2.zip
   -subfolder_3.zip

我尝试了以下方法:

for i in .; do zip -r $i.zip $i; done; 

导致一个..压缩包含所有子文件夹的文件

答案1

实际上,只有当前目录仅包含子目录时,m1k3y02() 提供的解决方案for i in *; do zip -r "$i.zip" $i; done才会起作用。

查找和压缩子目录的更好方法:

for dir in ./* ;do
    if [[ -d $dir ]];then
        zip -r ${dir}.zip $dir
    fi
done

或者

find . -type d -maxdepth 1 -exec zip -r {}.zip {} \;

答案2

以下是对其中一个的几个调整zuberruber 的回答

find . -mindepth 1 -maxdepth 1 -type d -exec zip -r --move --test {}.zip {} \;

它添加了一个-mindepth测试以避免压缩当前目录,并将全局深度测试放在测试之前-type以避免警告。此外,我还添加了--move --testzip 命令,以便在成功压缩后删除解压的文件。

答案3

解决方案如下...

for i in *; do zip -r "$i.zip" $i; done; 

相关内容