![编写脚本来 rsync 所有目录](https://linux22.com/image/859287/%E7%BC%96%E5%86%99%E8%84%9A%E6%9C%AC%E6%9D%A5%20rsync%20%E6%89%80%E6%9C%89%E7%9B%AE%E5%BD%95.png)
我有一大堆备份文件,每个文件都包含一个视频目录。每个视频目录都略有不同。我想将它们合并到一个目录中以进行保存,因为我并不真正关心每个视频来自哪个备份。
为此,我认为 rsync 将是最好的工具,但我很难想出一个干净的脚本来将每个备份的视频目录与外部目的地进行 rsync。
换句话说,我想要一个可以自动执行以下过程的脚本
rsync -a ./Backups/Backup-x/Videos/ ./CollectedVideos/
rsync -a ./Backups/Backup-y/Videos/ ./CollectedVideos/
rsync -a ./Backups/Backup-z/Videos/ ./CollectedVideos/
rsync -a ./Backups/Backup-t/Videos/ ./CollectedVideos/
目录中的所有文件Backups/
都是“公平游戏”。
任何建议,将不胜感激。
答案1
如果至少有一个文件夹./Backups
包含Video
目录,
for dir in ./Backups/*/Videos
do
if [[ -d $dir ]]
then
rsync -a $dir/* ./CollectedVideos/
fi
done
可能接近您所寻找的。
复制/*
文件$dir
而不包含其目录非常重要。
答案2
使用通配符不起作用:? 另一种方法是使用 find 和 xargs: 当然,find 是一个运行速度非常慢的命令rsync -a backup//Videos/ /
find backups/Backup-*/ -type f -name ""| xargs -I {} -n 1 rsync {} /