rsync 排除中级目录

rsync 排除中级目录

我正在尝试创建一个 rsync 作业,将 src /foo/bar/.jpg 同步到 dest /foo/.jpg,跳过中层目录但保留顶层目录。我确信有一种方法可以使用 --include --exclude 选项来做到这一点,但我一直无法弄清楚。

这是src结构;

   /Volumes/ExtHDD
└── YYMMDD
    ├── foo1
    │   └── bar
    ├── foo2
    │   └── bar
    └── foo3
        ├── image1.jpg
        ├── image2.jpg
        ├── image3.jpg
        └── image4.jpg

这就是我的最终目标;

   /Volumes/OS/Users/user/Dropbox
└── YYMMDD
        ├── image1.jpg
        ├── image2.jpg
        ├── image3.jpg
        └── image4.jpg

我努力了;

rsync -avhW --include='*.jpg' --exclude='*' src dest

但它甚至没有找到 .jpg 文件,所以我猜排除选项会覆盖它,但是我认为过滤器有一个操作顺序。

答案1

你可以直接复制这些文件。

src='/Volumes/ExtHDD'
dst='/Volumes/OS/Users/user/Dropbox'
dir='YYMMDD'

mkdir -p "$dst/$dir"
rsync -av "$src/$dir"/*/*.jpg "$dst/$dir/"

ifYYMMDD表示一系列目录,使用循环来遍历它们

for dir in "$src"/??????
do
    mkdir -p "$dst/${dir##*/}"
    rsync -av "$dir"/*/*.jpg "$dst/${dir##*/}/"
done

相关内容