繁体   English   中英

同步而不扫描单个文件? [关闭]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM