6

考虑两个目录:

/home/用户/音乐/flac
/媒体/音乐/flac

我希望第二个目录(目标;USB 驱动器)包含与第一个目录(主目录)相同的文件和结构。有3600多个文件(总共59G)。使用unison扫描每个文件,这非常慢。我宁愿根据文件名、大小和修改时间进行比较。

我认为rsync可能更好,但手册页中的示例相当神秘,而且 Google 搜索没有发现任何简单、有见地的示例。我宁愿不要不小心擦除master中的文件。;-)

主列表会随着时间而改变:重新组织目录、添加新文件和更新现有文件(例如,重新标记)。通常变化很小;花费数小时来完成同步让我觉得次优。

将目标目录与主目录同步的确切命令是什么?

该命令应该复制新文件,重新组织移动的文件(或删除然后复制),并复制更改的文件(基于日期)。目标文件的时间戳应设置为主文件的时间戳。

4

2 回答 2

6

您可以通过这种方式使用 rsync:

rsync --delete -r -u /home/user/music/flac/* /media/MUSIC/flac

它将删除 /media/MUSIC/flac 中的文件(从不在 master 上),并根据文件日期进行更新。

还有更多选择,但我认为这种方式对你来说已经足够了。:-)

(我只是做了简单的测试!请测试更好!)

于 2009-08-13T23:40:38.653 回答
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 "{}" \;

这不会做的唯一事情是从目标中删除已在源中删除的目录 - 如果您也想要这样做,则必须使用类似的查找/脚本组合进行第三遍。

于 2009-08-14T03:00:17.823 回答