当前位置: 首页 > 知识库问答 >
问题:

如何压缩Bash中的所有子文件夹?

淳于祺
2023-03-14

我是Bash新手,正在尝试压缩子文件夹,但它不起作用。

|-- Folder
|   |-- SubFolder1
|   |-- SubFolder2
|   |-- SubFolder3

tar命令之后

|-- Folder
|   |-- SubFolder1
|   |-- SubFolder2
|   |-- SubFolder3
|   |-- SubFolder1.tar.gz
|   |-- SubFolder2.tar.gz
|   |-- SubFolder3.tar.gz

脚本:

#!/bin/bash
DEST=/home/pc/Desktop


for folder in $DEST
do

      tar -czvf "$folder.tar.gz"  $DEST
      #rm -rf "$folder"

done

我该怎么做?

共有2个答案

太叔弘壮
2023-03-14

请检查代码块中的注释:

#!/bin/bash
DEST=/whatever/whatever/*/  #Note the ending "/" let you get only dirs

for folder in $DEST
do
    #the basename gets the name of current sub-dir
    #instead of fullpath
    tar -czvf "$(basename "$folder").tar.gz"  "$folder"
done

您可能会得到类似“tar:删除前导“/”或斜杠...”的内容错误消息,我不记得确切的措辞。您可以在tar中添加< code>-P来忽略它。

谯德佑
2023-03-14

您的for循环需要被告知要迭代什么。您只是告诉它顶级目录:

...
DEST=/home/pc/Desktop

for folder in $DEST
...

这需要包含一个通配符,以便Bash知道您想要其下的所有目录:

...
DEST=/home/pc/Desktop

for folder in "$DEST"/*
...
$ mkdir -p Folder/SubFolder{1,2,3}
$ tree Folder/
Folder/
├── SubFolder1
├── SubFolder2
└── SubFolder3

3 directories, 0 files

你的命令:

$ for i in Folder/;do echo "$i";done
Folder/

带星(*):

$ for i in Folder/*;do echo "$i";done
Folder/SubFolder1
Folder/SubFolder2
Folder/SubFolder3

您可以使用<code>find

$ find Folder/ -mindepth 1 -maxdepth 1 -type d | xargs -I {} tar zcvf {}.tar.gz {}
Folder/SubFolder3/
Folder/SubFolder1/
Folder/SubFolder2/

$ ll Folder/
total 24
drwxr-xr-x 2 root root 4096 Sep  4 07:30 SubFolder1
-rw-r--r-- 1 root root  122 Sep  4 08:01 SubFolder1.tar.gz
drwxr-xr-x 2 root root 4096 Sep  4 07:30 SubFolder2
-rw-r--r-- 1 root root  122 Sep  4 08:01 SubFolder2.tar.gz
drwxr-xr-x 2 root root 4096 Sep  4 07:30 SubFolder3
-rw-r--r-- 1 root root  122 Sep  4 08:01 SubFolder3.tar.gz
 类似资料:
  • 可能重复: gzip一组目录并创建tar压缩文件 这篇文章描述了如何在一个目录结构中分别gzip每个文件。然而,我需要做一些稍微不同的事情。我需要为某个目录下的所有文件生成一个大的gzip文件。我还需要能够为压缩文件(例如files.gz)指定输出文件名,并覆盖旧的压缩文件(如果已经存在)。

  • 问题内容: 我想在当前位置的子目录之间进行迭代,并分别gzip每个文件。为了在目录中压缩文件,我使用 但这仅适用于当前目录,而不适用于当前目录的子目录。如何重写以上语句,以便也将所有子目录中的文件压缩? 问题答案: 不需要循环或除和以外的任何东西: 这将查找当前目录中及其下所有名称不以扩展名结尾的常规文件(即,所有尚未压缩的文件)。它分别在每个文件上调用。 编辑的基础上,从评论: 花括号()替换为

  • 问题内容: 我想将tar及其目录中的所有.php和.html文件及其子目录。如果我用 它将所有文件焦油化,这是我不需要的。如果我用 它忽略子目录。如何递归使它成为tar但仅包含两种类型的文件? 问题答案:

  • 问题内容: 我有一个ZIP文件目录(在Windows计算机上创建)。我可以使用手动解压缩它们,但是如何通过外壳解压缩当前文件夹中的所有ZIP文件呢? 使用Ubuntu Linux服务器。 问题答案: 根据以下链接,这可以在bash中运行: 解压缩\ *。zip

  • 我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?

  • 问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示: