考虑两个目录:
/home/user/music/flac /media/MUSIC/flac
我希望第二个目录(目标; USB驱动器)包含与第一个目录(master)相同的文件和结构。有3600多个文件(总共59G)。每个文件都使用unison进行扫描,速度非常慢。我宁愿根据文件名,大小和修改时间进行比较。
我认为rsync可能会更好,但手册页中的示例相当神秘,而Google搜索并未透露任何简单,富有洞察力的示例。我宁愿不小心擦除主文件中的文件。 ; - )
主列表将随时间而变化:重新组织目录,添加新文件和更新现有文件(例如,重新标记)。通常这些变化很小;花费数小时完成同步对我来说是次优的。
将目标目录与主目录同步的确切命令是什么?
该命令应复制新文件,重新组织移动的文件(或删除然后复制),并复制更改的文件(基于日期)。目标文件的时间戳应设置为主时间戳。
答案 0 :(得分:6)
您可以这样使用rsync:
rsync --delete -r -u /home/user/music/flac/* /media/MUSIC/flac
它将删除/ media / MUSIC / flac中的文件(从不在master上),并根据文件日期进行更新。
还有更多选择,但我认为这种方式对您来说已经足够了。 : - )
(我只做了简单的测试!请测试更好!)
答案 1 :(得分:0)
您可以使用简单的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 "{}" \;
唯一不做的就是从目标中删除已在源中删除的目录 - 如果你也想要这样做,你必须使用类似的查找/脚本组合进行第三次传递。