コピー先ディレクトリのコンテンツを置き換えずに、ディレクトリ全体を同じ名前のディレクトリにコピーするにはどうすればよいですか? (代わりに、宛先フォルダーのコンテンツに追加したいと思います)
rsync
を使用し、元のディレクトリでより新しいファイルのみを更新する場合は-u
を渡します。宛先にすでに存在するすべてのファイルをスキップするには--ignore-existing
を渡します。
rsync -au /local/directory/ Host:/remote/directory/
rsync -a --ignore-existing /local/directory/ Host:/remote/directory/
(ソース側の/
に注意してください。これがない場合、rsync
は/remote/directory/directory
を作成します。)
scp は、ファイルへの書き込み権限がある場合、ファイルを上書きします。
つまり、ファイルの書き込み権限を一時的に削除することで、ファイルをscp
から効果的にスキップさせることができます(ファイルの所有者の場合)。
日付でコピーできるのは新しいファイルのみです。 find
を使用
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
宛先ファイルの内容を読み取り専用にできる場合:
find . -type f -exec chmod a-w '{}' \;
scp
を実行する前(不満が出て既存のファイルをスキップします)。
そして、後で元に戻します(chmod +w
は、umaskベースの値を取得します)。 umaskに従ってすべてのファイルに書き込み権限がない場合は、復元できるように、何らかの方法で権限を保存する必要があります。
(Gillesの回答が既存のファイルをローカルで上書きする場合、それらが新しい場合、私はそのようにして貴重なデータを失いました。なぜその間違った有害な回答が非常に多くの賛成票を投じているのか理解できません)。
大量のファイルをコピーする場合は、ファイルをtarする方が高速です。 -kを使用することにより、ターゲットシステムで解凍するときにtarがファイルを上書きすることも防止できます。
tar -c <source-dir> | ssh <name>@<Host> 'tar -kxzf - -C <target-dir>'
ストレージにもSFTPしかないため、rsync
、csync
、またはFuseを使用できませんでした。 rsync
はファイルの日付と時刻を変更できませんでした。他のいくつかのユーティリティ(csync
など)は他のエラーを表示しました:「一時ファイルを作成できませんクロックスキューが検出されました "。
ストレージサーバーにアクセスできる場合は、openssh-server
をインストールするか、ここでデーモンとしてrsync
を起動します。
私の場合-私はこれを行うことができず、解決策はlftpでした。 lftp
の同期化の使用法は以下のとおりです。
lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder
-私のPC上のフォルダー、/rem/folder
-はsftp://sft.domain.tld/rem/folder
です。
あなたはリンクでmanページを見つけるかもしれません: http://lftp.yar.ru/lftp-man.html
scp
はファイルを上書きし、それを停止するスイッチはありませんが、方法をコピーしてscpを実行し、既存のファイルをコピーして戻すことができます。例:
既存のファイルをすべてコピーします
mkdir original_files ; cp -r * original_files/
Scpを使用してすべてをコピーする
scp -r user@server:dir/* ./
Scpが上書きしたものに元のファイルをコピーします。
cp -r original_files/* ./