Как сжать все подпапки в Bash? - PullRequest
0 голосов
/ 04 сентября 2018

Я новичок в 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

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Пожалуйста, проверьте комментарии в блоке кода:

#!/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: удаление ведущего" / "или косой черты ...", я не могу вспомнить точную формулировку. Вы можете добавить -P к вашему tar, чтобы игнорировать его.

0 голосов
/ 04 сентября 2018

Вашему циклу 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

Использование find

Вместо использования for для генерации каталогов до tar, вы можете использовать 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
...