Скрипт оболочки для резервного копирования отфильтрованных каталогов - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть несколько каталогов, которые я хочу скопировать в zip-файл с помощью сценария оболочки. Дерево каталогов выглядит так:

testing
     |_ source
     |     |_ fiction_01
     |     |_ fiction_02
     |     |_ ...
     |     |_ images
     |
     |_ destination

Я хочу только заархивировать каталоги, начиная с того же шаблона, скажем, f*. Не заинтересован в images. Полученный почтовый индекс должен быть сохранен в destination. Из здесь я получаю, как отфильтровать все каталоги, чье имя начинается с f. Это мой код:

#!/bin/bash

# source and destination directories passed as 1st and 2nd parameters respectively
 SRCDIR=$1
 DESTDIR=$2

# children directories are those matching f*
 CHLDIR=$(find "$SRCDIR" -type d -name "f*") 

# name with timestamp for the .zip 
 BKPNAME=backup-$(date +%-Y%-m%-d)-$(date +%-T).zip

# actual zipping
 zip -r $DESTDIR$BKPNAME $SRCDIR$CHLDIR

Сценарий называется backup.sh и живет в destination. Вот что я получаю после его запуска:

jm@lenovo410:~/Documents/testing/destination$ bash backup.sh ../source/ ./
  adding: ../source/../source/fiction_02/ (stored 0%)
  adding: ../source/../source/fiction_02/another.txt (stored 0%)
  adding: ../source/fiction_01/ (stored 0%)
  adding: ../source/fiction_01/list.txt (stored 0%)

ZIP-файл создается в каталоге destination. Хотя кажется, что были добавлены и fiction_01, и fiction_02 (и их содержимое), когда я проверяю, внутри zip есть только каталог fiction_01.

Вопрос : Как можно Я заархивировал все папки, имя которых соответствует условию f*?

1 Ответ

0 голосов
/ 01 февраля 2020

Имена путей, возвращаемые find, уже начинаются с $SRCDIR, вам не нужно объединять его при запуске zip. Вы пытаетесь добавить /testing/source/testing/source/fiction_01 в zip-файл.

zip -r $DESTDIR$BKPNAME $CHLDIR

Когда вы отлаживаете скрипт оболочки, один из лучших инструментов - поместить set -x в начале. Затем вы увидите след всех выполняемых команд с раскрытыми переменными. Тогда вы бы увидели эти неправильные пути.

...