我是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
我该怎么做?
请检查代码块中的注释:
#!/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来忽略它。
您的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,用于取消存档的代码如下所示: