[英]Sync without scanning individual files? [closed]
考虑两个目录:
/home/user/music/flac /media/MUSIC/flac
我希望第二个目录(目标; USB驱动器)包含与第一个目录(主目录)相同的文件和结构。 有3600多个文件(总共59G)。 每个文件都使用unison进行扫描,速度非常慢。 我宁愿根据文件名,大小和修改时间进行比较。
我认为rsync可能会更好,但手册页中的示例相当神秘,谷歌搜索没有透露任何简单,有见地的例子。 我宁愿不小心擦除主文件中的文件。 ;-)
主列表将随时间而变化:重新组织目录,添加新文件和更新现有文件(例如,重新标记)。 通常这些变化很小; 花费数小时来完成同步对我来说是次优的。
将目标目录与主服务器同步的确切命令是什么?
该命令应复制新文件,重新组织移动的文件(或删除然后复制),并复制更改的文件(基于日期)。 目标文件的时间戳应设置为主时间戳。
您可以这样使用rsync:
rsync --delete -r -u /home/user/music/flac/* /media/MUSIC/flac
它将删除/ media / MUSIC / flac中的文件(从不在master上),并根据文件日期进行更新。
有更多的选择,但我认为这种方式对你来说已经足够了。 :-)
(我只做了简单的测试!请测试更好!)
您可以使用普通的旧cp
来复制新的和更改的文件(只要您的文件系统具有工作时间戳):
cp -dpRuv /home/user/music/flac /media/MUSIC/
要从目标中删除源中不存在的文件,您需要使用find。 像这样创建一个脚本/home/user/bin/remover.sh
:
#!/bin/bash
CANONNAME="$PWD/$(basename $1)"
RELPATH=$(echo "$CANONNAME" | sed -e "s@/media/MUSIC/flac/@@")
SOURCENAME="/home/user/music/flac/$RELPATH"
if [ ! -f "$SOURCENAME" ]; then
echo "Removing $CANONNAME"
rm "$CANONNAME"
fi
使其可执行,然后从find
运行它:
find /media/MUSIC/flac -type f -execdir /home/user/bin/remover.sh "{}" \;
唯一不做的是从目标中删除已在源中删除的目录 - 如果你也想要这样做,你将不得不进行第三次传递,使用类似的查找/脚本组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.