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
以下は元のコマンドに対するいくつかの選択肢です。
使用
rsync
rsync -ab myfile.ext [email protected]:/bar/baz
この
-b
フラグは、rsync
ターゲットファイルが変更された場合にバックアップを実行するように指示します。デフォルトは追加~
ですが、このデフォルトを変更できます。たとえば、以下は今日の日付(ソースマシンで定義されているように)を使用します。rsync -ab --suffix ".$(date +'%Y%m%d')" myfile.ext [email protected]:/bar/baz
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