今、あなたが何を考えているのか知っています」ただrsyncを使うしかし、残念ながら、このシステムにはrsyncがないので、別のソリューションを提案したいと思います。
設定:
- ソースサーバーには、140,000を超えるファイルを含むアップロードフォルダがあります。(サブディレクトリなし)
- ターゲットサーバーには、140,000を超えるファイルを含むアップロードフォルダが必要です。
これをステッカーメモだけに移行と呼びます...状況を複雑にするために、サーバー1は新しいアップロードまたはサムネイルが作成されるたびに毎日新しいファイルを引き続きインポートするので、今この点に留意する必要があります。1から2までファイルをコピーするだけです。「20 GB以上のコピー操作が完了すると、ソースサーバーにすでに新しいファイルがあるため再起動できるため機能しません...
私のソリューションのアイデア
- ソースからターゲットにフォルダ全体をコピーする
- ターゲットサーバーで最新の作成日を見つけ、ソースサーバーの開始点として使用する
- 最後の作成日以降にソースからターゲットにすべてのファイルをコピーする(増分)
- できるだけ頻繁にこれを行うようにクローンを設定します。
私の質問
find /uploads/* -mtime -1
bash: /bin/find: Argument list too long
これで、bashスクリプトループの作成を開始する前に、誰かがbashスクリプトなしでこれを行うことができる別の方法、つまり古い低レベルCLIを提案できるかどうか疑問に思います。
ベストアンサー1
解決策が見つかりましたが、まだ解決策が見つかりませんでした。まだ作業中です。
ファイルシステムの作成/変更日を信頼できると仮定すると、findを使用してファイルのリストを生成し、それをテキストファイルに出力してから、ループを使用してターゲットサーバーをscpできます。検索結果をscpに直接正しく送信できないようです。
ヘルパープログラムを使用しました。SSHパスしかし、キーファイルを使用する方が良いことがわかります。
ターゲットサーバーでソースサーバー上のファイルを見つけて結果を保存し、結果を1つのディレクトリとファイルに制限します。
sshpass -p 'MyPassword' ssh [user@server] "find [path/to/look/in] -maxdepth 1 -mtime -1 -type f" > /tmp/last-24-hours-file-list.txt
出力ファイルを繰り返し、ファイルごとに scp を呼び出します。
while read filename; do sshpass -p 'MyPassword' scp -Crpv [user@server]:$filename [path/to/save/to]; done < /tmp/last-24-hours-file-list.txt