【问题标题】:How to compress all subfolder in Bash?如何压缩 Bash 中的所有子文件夹?
【发布时间】:2019-02-09 09:56:54
【问题描述】:

我是 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

我该怎么做?

【问题讨论】:

标签: linux bash tar


【解决方案1】:

您的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

使用查找

您可以使用find,而不是使用for 生成目录到tar,如下所示:

$ 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

【讨论】:

  • 这也列出了文件
  • @EmreAydınsoy 您应该更改您的 tar cmd,否则创建的 tar.gz 文件将位于每个子目录下。
【解决方案2】:

请检查代码块中的cmets:

#!/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:removingleading "/" or slash...”的错误信息,我不记得确切的措辞了。您可以将-P 添加到您的 tar 以忽略它。

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多