全部,我需要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
答案 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