6

次の 2 つのディレクトリを検討してください。

/ホーム/ユーザー/音楽/flac
/メディア/ミュージック/flac

2 番目のディレクトリ (宛先、USB ドライブ) に、最初のディレクトリ (マスター) と同じファイルと構造を含めたいと考えています。3600 以上のファイル (合計 59G) があります。すべてのファイルは、非常に遅い unisonを使用してスキャンされます。ファイル名、サイズ、および変更時間に基づいて比較したいと思います。

rsyncの方が優れていると思いますが、man ページの例はやや不可解であり、Google 検索では単純で洞察に満ちた例は見つかりませんでした。マスター内のファイルを誤って消去したくありません。;-)

マスター リストは時間の経過とともに変化します。ディレクトリの再編成、新しいファイルの追加、既存のファイルの更新 (タグの付け直しなど)。通常、変更はマイナーです。同期を完了するのに何時間もかかるのは、最適とは思えません。

宛先ディレクトリをマスターと同期するための正確なコマンドは何ですか?

このコマンドは、新しいファイルをコピーし、移動したファイルを再編成 (または削除してからコピー) し、変更されたファイルを (日付に基づいて) コピーする必要があります。宛先ファイルのタイムスタンプは、マスターのタイムスタンプに設定する必要があります。

4

2 に答える 2

6

次の方法で rsync を使用できます。

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

/media/MUSIC/flac 内のファイルを削除し (マスター上にはありません)、ファイルの日付に基づいて更新します。

他にも選択肢はありますが、この方法で十分だと思います。:-)

(簡単なテストをしただけです!もっとよくテストしてください!)

于 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 "{}" \;

これが行わない唯一のことは、ソースで削除された宛先からディレクトリを削除することです。これも必要な場合は、同様の検索とスクリプトの組み合わせで3回目のパスを作成する必要があります。

于 2009-08-14T03:00:17.823 に答える