Recursively Rsync/copy files to different structure
我有给定的文件结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | - dev/ - examplesite.com/ - public/ - file.css - file.jpg - anotherexamplesite.com/ - public/ - stuff.css - things.jpg - resources/ - views/ - view.php - public/ - examplesite.com/ - somefile.txt - sites/ - examplesite.com/ |
我想将
1 2 3 4 5 6 7 | - public/ - examplesite.com/ - file.css - file.jpg - anotherexamplesite.com/ - stuff.css - things.jpg |
将
1 2 3 4 5 | - sites/ - examplesite.com/ - resources/ - views/ - view.php |
基本上将每个站点中的公共目录的内容复制到一个目录中,然后将父目录同步到
这就是我所拥有的:
1 2 3 4 5 | #!/usr/bin/env bash MY_PATH="/var/www" rsync --exclude='.git/'"$MY_PATH/dev/""$MY_PATH/sites/" --recursive rsync --exclude='.git/' --exclude='resources/'"$MY_PATH/dev/public""$MY_PATH/public/" --recursive |
这个脚本的第一个rsync命令工作正常,它可以将文件复制到站点目录中,而不会发出任何问题,因为文件夹结构不需要更改。但是,第二个rsync命令执行以下操作:
1 2 3 4 5 6 7 8 9 | - public/ - examplesite.com/ - public/ - file.css - file.jpg - anotherexamplesite.com/ - public/ - stuff.css - things.jpg |
我真的不知道如何轻松地将文件递归复制到正确的站点文件夹中,同时也将目标文件移出其公用目录,并向上移动一个目录,以便它们直接位于站点名下。
有什么想法吗?
您可以将一些
1 2 3 4 5 | for site in $MY_PATH/dev/*; do dist="$MY_PATH/public/$(basename"$site")" mkdir -p"$dist" rsync -r --exclude='.git/'"$site/public/""$dist/" done |
这将:
- 遍历
dev/ 中的站点 - 确定目的地并将其存储在变量
dist 中。 - 确保目标目录存在
- 从
dev/ 到public/ 的rsync 。
这段代码只处理
如果希望