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

标签 linux bash tar

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

我该怎么做?

最佳答案

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

关于linux - 如何压缩 Bash 中的所有子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165060/

相关文章:

c - 如何使用 clock_getttime() 在 linux 操作系统上使用 C 以纳秒为单位记录进程执行时间?

bash - 使用 bash 命令(带管道)的输出作为另一个命令的参数

linux - Tar Issue 后脚本中的二进制文件

bash - 在 Bash 中自定义 "command not found"消息

bash - 如何将进度条添加到 somearchive.tar.xz 提取

php - 创建存档并添加来自与特定类型匹配的特定路径的所有文件

ios - GitLab Ci Runner 错误 "bash: line 21: xcodebuild: command not found "

c - O_DIRECT 与 Linux/FreeBSD 上的 O_SYNC

c - 可变堆栈大小

bash - 用 sed 替换由换行符分隔的花括号