Как распаковать gzip с тем же именем папки - PullRequest
0 голосов
/ 28 мая 2019

Все, мне нужно распаковать папку 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 голосов
/ 28 мая 2019

попробуйте, если вы можете использовать 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
0 голосов
/ 28 мая 2019

Используйте команду оболочки, чтобы определить имя каталога и записать его в переменную.Затем используйте эту переменную для создания файла 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$ 
...