我希望将驻留在各种子文件夹中的一堆 flac 文件同步到目标文件夹的根目录。
源目录结构的示例是:
source> tree Music/
Music/
├── R
│ ├── Radiohead
│ │ └── OK Computer
│ │ ├── 01 - Radiohead - Airbag.flac
│ │ ├── 02 - Radiohead - Paranoid Android.flac
│ └── Red Hot Chilli Peppers
│ └── Greatest Hits
│ ├── 01 - Red Hot Chili Peppers - Under the Bridge.flac
│ ├── 02 - Red Hot Chili Peppers - Give It Away.flac
我正在使用此命令,它可以很好地同步,但包含目标上的目录路径:
rsync -rltDzvh --delete -e ssh Music/ user@192.168.1.1:/Destination/ --include="*/" --include="*.flac" --exclude="*"
所以在目的地的结构是:
destination> tree /Destination/
/Destination/
├── R
│ ├── Radiohead
│ │ └── OK Computer
│ │ ├── 01 - Radiohead - Airbag.flac
│ │ ├── 02 - Radiohead - Paranoid Android.flac
│ └── Red Hot Chilli Peppers
│ └── Greatest Hits
│ ├── 01 - Red Hot Chili Peppers - Under the Bridge.flac
│ ├── 02 - Red Hot Chili Peppers - Give It Away.flac
我想修剪所有目录,以便仅将文件放入 /Destination/ 的根目录中,例如
destination> tree /Destination/
/Destination/
├── 01 - Radiohead - Airbag.flac
├── 02 - Radiohead - Paranoid Android.flac
├── 01 - Red Hot Chili Peppers - Under the Bridge.flac
├── 02 - Red Hot Chili Peppers - Give It Away.flac
所有文件都有不同的名称,所以没关系,我已经查看了 rsync 中的各种选项,例如 --no-relative 但无法让它按需要工作。
我还想出了:
find ./Music/ -name "*.flac" -exec rsync -ltDzvh {} -e ssh user@192.168.1.1:/Destination/ \;
但这意味着使用 ssh 密钥并且可能效率低下,如果我想使用 --delete 它可能会破坏一切。
那么,当我在源上的音乐库中添加、删除或重命名项目并将这些更改同步到目标时,我将如何实现这一点,同时仍然能够使用 --delete 或 --delete-excluded 呢?