scpで元のファイルをバックアップする

scpで元のファイルをバックアップする

scpを使用して上書きしたいファイルを持つリモートホストがあります。これは簡単です

scp 'myfile.ext' '[email protected]:/bar/baz'

また、新しいバージョンで上書きするのではなく、元の "/bar/baz/myfile.xt"をファイルに "名前を変更"したいと思います。単純な "/bar/baz/myfile.xt~"で十分ですが、カウンターまたは現在の日付がより良いです。

scpでできる方法はありますか?

常にインタラクティブなパスワードを入力する必要があるため、「scp」呼び出しを最小限にしたいと思います。 (いいえ、認証方法は変更できません。)

答え1

カウンターまたは日付サフィックスを使用して、元の名前の名前をより良い名前/bar/baz/myfile.xtに変更したいと思います。/bar/baz/myfile.xt~

を使用してこれを直接実行することはできませんが、scp以下は元のコマンドに対するいくつかの選択肢です。

  1. 使用rsync

    rsync -ab myfile.ext [email protected]:/bar/baz
    

    この-bフラグは、rsyncターゲットファイルが変更された場合にバックアップを実行するように指示します。デフォルトは追加~ですが、このデフォルトを変更できます。たとえば、以下は今日の日付(ソースマシンで定義されているように)を使用します。

    rsync -ab --suffix ".$(date +'%Y%m%d')" myfile.ext [email protected]:/bar/baz
    
  2. sshと一緒に使用されますscp。これは、bazソースファイルがコピーされるディレクトリではなく、ターゲットファイルの名前であると仮定します。

    ssh [email protected] 'cp -p /bar/baz /bar/baz."$(date +'%Y%m%d')"' &&
    scp -p myfile.ext [email protected]:/bar/baz
    

    必要に応じてmv代わりに使用できますが、cpこれにより実際のターゲットファイルに対する非標準のアクセス許可とハードファイルのリンクが失われます。

このrsyncオプションはよりきれいですが、常にインストールされるわけではありません。

答え2

必ずそうでしょうかscp?私はそれがあなたのためにファイルの名前を変更できるとは思いません(リモートコピーを除いて、それがどれだけうまく機能するかはわかりませんでした)。

sftp仕事はかなり簡単になります。

$ echo -e 'rename test test.old\nput test' | sftp user@hostname

ssh以下を使用してこれを実行することもできます。test

$ cat test | ssh user@hostname 'mv test "test.$(date +%F_%T)"; cat > test'

答え3

あなたはそれを使用することができますmirrordir

Mirror ~/scripts to ~/scripts.backup:
$ mkdir ~/scripts.backup
$ mirrordir -v ~/scripts ~/scripts.backup

If you rerun mirrordir again, only the updated files are copied.

You can mirroring FTP sites:
$ mirrordir -v ftp://ftp.nixcraft.in/pub /home/backup/nixcraft.in/ftp/pub

mirrordir offers tons of option, refer mirrordir man page for more examples and options:
$ man mirrordir

関連情報