【问题标题】:How to tar gzip with the same folder name如何使用相同的文件夹名称 tar gzip
【发布时间】:2019-05-28 01:58:30
【问题描述】:

所有,我需要 tar gzip 文件夹,名称应与原始文件夹名称相同。

示例目录:/user/abc/documents/20190101 我需要通过不明确指定文件夹名称来将 20190101 文件夹 tar 到 20190101.tar.gz。

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

【问题讨论】:

    标签: shell gzip tar


    【解决方案1】:

    使用 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$ 
    

    使用 find 来检测目录。循环迭代并创建与目录同名的 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$ 
    

    【讨论】:

      【解决方案2】:

      试试这个,如果你可以使用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 2015-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        相关资源
        最近更新 更多