如何使用相同的文件夹名称压缩gzip

时间:2019-05-28 01:58:30

标签: shell gzip tar

全部,我需要tar gzip该文件夹,并且名称应与原始文件夹名称相同。

示例目录:/ user / abc / documents / 20190101 我需要通过不显式指定文件夹名称的方式将20190101文件夹压缩到20190101.tar.gz。

tar -czvf /user/abc/documents/20190101.tar.gz / user / abc / documents / 20190101 / testing / 20190506-081500000

2 个答案:

答案 0 :(得分:0)

使用shell命令检测目录名称并将其捕获到变量中。然后使用此变量创建tar文件。

例如

创建一些文件和目录:

shell$ mkdir -p foo/001
shell$ mkdir -p foo/002
shell$ mkdir -p foo/003
shell$ touch foo/bar.txt
shell$ tree foo
foo
├── 001
├── 002
├── 003
└── bar.txt

3 directories, 1 file
shell$ 

检查目录结构

shell$ cd foo
shell$ find . -type d
.
./001
./003
./002
shell$ find . -type d | grep -v "\.$"
./001
./003
./002
shell$ 

使用查找来检测目录。循环循环并创建与目录同名的tar文件。

shell$ for x in `find . -type d | grep -v "\.$"`; do
> echo "Tarring $x..."
> tar cvzf $x.tar.gz $x
> done
Tarring ./001...
a ./001
Tarring ./003...
a ./003
Tarring ./002...
a ./002
shell$ 

验证

shell$ tree .
.
├── 001
├── 001.tar.gz
├── 002
├── 002.tar.gz
├── 003
├── 003.tar.gz
└── bar.txt

3 directories, 4 files
shell$ 

答案 1 :(得分:0)

如果可以使用bash,请尝试以下操作:

targz.sh

#!/bin/bash
name=$(sed 's@\(.*/\)\([0-9]*\)/.*@\1|\2@' <<< "$1")
tar -czvf "${name%%|*}${name##*|}.tar.gz" "$1"

用法

targz.sh "/user/abc/documents/20190101/testing/20190506-081500000"

说明

sed '              # use sed
s@                 # substitute
\(.*/\)            # save first part into arg1 (\1)
\([0-9]*\)/        # save date into arg2 (\2)
.*@                # ignore all char to the end
\1|\2@' <<< "$1"   # print \1 | \2

${name%%|*}        # \1 --> path
${name##*|}        # \2 --> date