Копирование папок из файла, кроме подпапок из файла - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу скопировать некоторые каталоги и файлы. Я сделал их список (абсолютный путь), но некоторые из них содержат папки, которые мне не нужны (исключая папки, имеющие также абсолютный путь). Я хочу скопировать только include и глубже (без файлов / папок, упомянутых в exclude), но эта и другие сделанные мной версии, похоже, работают не очень хорошо.

rsync -rz  --exclude-from="$exclude" --include-from="$include" . $repository_path

enter image description here

Допустим, что в структуре файла

файл include содержит две строки:

/a
/b

исключение файла:

/a/aa

И желаемый вывод:

enter image description here

1 Ответ

1 голос
/ 22 апреля 2020

Давайте рассмотрим это с вашей файловой структурой. Прежде всего мы создаем директорию testsyn c для воспроизведения в пределах:

mkdir testsync && cd testsync
mkdir -p a/aa/whatever b/bb c/whatever c/noneed
touch a/file.txt a/picture.jpg b/bb/morefiles.txt b/txt.txt

Давайте проверим это с помощью tree:

.
├── a
│   ├── aa
│   │   └── whatever
│   ├── file.txt
│   └── picture.jpg
├── b
│   ├── bb
│   │   └── morefiles.txt
│   └── txt.txt
└── c
    ├── noneed
    └── whatever

Создаем файл include.dat с содержимым:

- /a/aa/*
+ /
+ /a
+ /a/***
+ /b
+ /b/***
- *

Подробнее о синтаксисе файла include / exclude в руководстве (man rsync) в разделе INCLUDE/EXCLUDE PATTERN RULES.

Вы ДОЛЖНЫ включать каждый каталог со своим предком, чтобы его можно было синхронизировать , Вот почему / и /a с /a/*** (тройная звездочка для всего содержимого каталога в нем) включена

Мы создаем другой каталог вне testsyn c: targetsync и тестируем:

rsync -az --include-from=include.dat ~/testsync/ ~/targetsync/

Теперь, когда мы каталоги go - targetsync и используем tree, чтобы получить изображение:

.
├── a
│   ├── aa
│   ├── file.txt
│   └── picture.jpg
└── b
    ├── bb
    │   └── morefiles.txt
    └── txt.txt
...