从文件复制文件夹,但从文件复制子文件夹

Copying folders from file except subfolders from file

我想复制一些目录和文件。我列出了它们(绝对路径),但其中一些包含我不想要的文件夹(不包括也具有绝对路径的文件夹)。我只想复制 include 和更深层次的(没有在 exclude 中提到的 files/folders)但是这个,以及我制作的其他版本似乎并不 运行 好。

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

假设这就是文件结构

文件包含有两行:

/a
/b

文件排除:

/a/aa

所需的输出:

让我们用你的文件结构来钻探它。 首先,我们创建 testsync 目录以在其中播放:

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 PATTERN RULES.

部分手册 (man rsync) 中有关 include/exclude 文件语法的更多信息

您必须将每个目录包含在其祖先目录中,以便同步。这就是为什么包含 //a 以及 /a/***(三个星号表示其中所有目录内容)的原因

我们在 testsync 之外创建另一个目录:targetsync 和 test:

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

现在当我们进入targetsync目录并使用tree获取图片时:

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