scpを使用してフォルダー内の最新のファイルをダウンロードする方法


10

scp転送を実行して、特定のディレクトリにある最新の(最新の)ファイルをローカルディレクトリにダウンロードしたいと思います。

このようなもの:

  • ソースroot@rimmer.sk:/home/rimmer/backups/
  • 目的地/home/rimmer/backups/

最新のファイルのみを取得しますが、すべてではありませんbackups

回答:


12

変数がserverあり、dir定義されているとしましょう。

$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

最初に最新のファイルを探し、それをコピーする場所。

注:私はそれが絶対確実であることを確認しませんでした(たとえば、最新のエントリがフォルダーである)


それが何もscpしないディレクトリである場合。を使用する必要があります scp -r
slm

@slm正解ですが、彼はそれをコピーしたくないかもしれません。
ベルンハルト

scpgetが中断された場合、コピーを最初から再開する必要があり、中断rsyncしたところから再開できます。
slm

bashの場合、への引数で一重引用符を二重引用符に置き換える必要がありましたssh
Johannes Bittner

1
次のようにすると、最初の$ dirを削除できます(/*2番目の$ dirの末尾にa を追加):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
Jesse

1

scpファイルをソースから宛先に盲目的にコピーするという意味では、ばかげています。ファイルのコピーに関してよりインテリジェントなものが必要な場合は、などのツールを使用する必要がありますrsync

$ rsync -avz root@rimmer.sk:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/

これにより、欠落しているファイルまたは変更されたファイルのみが、最終日のrimmer.skのバックアップディレクトリ(-ctime -1)からローカルバックアップのディレクトリにコピーされます。

-ctime n
   File's  status  was last changed n*24 hours ago.  See the comments for 
   -atime to understand how rounding affects the interpretation of file 
   status change times.

参考文献


rsyncの問題も同じです。私が2日間オフラインになっていると、すべての日からすべてのバックアップをコピーしようとしますが、これはまったく必要がなく、巨大です。
Richard Rodriguez

@RichardRodriguez-では、質問を更新して、目的を具体的に説明してください。
slm

2
@slm:質問はそのままでも大丈夫だと思います。最新のファイルをディレクトリにダウンロードしたいだけです。それについて、これ以上何を説明できますか?:)
リチャード・ロドリゲス

@RichardRodriguez-このディレクトリにはどのファイルがありますか?サンプルのリストが参考になります。
slm

1
なぜ反対票か。
slm

0

パーティーには少し遅れますが、おそらくsshとrsyncを使用した解決策は一部で機能します。

source_host="yourhost.com"
source_dir="/a/dir/on/yourhost.com/"
target_dir="/the/dir/where/last_backup/will/be/placed"
last_backup=$(ssh user@${source_host} "ls -t ${source_dir} | head -1")
if [ "${last_backup}" == "" ]; then
    echo "ERROR: didn't find a backup, cannot continue!"
else
    echo "the last backup is: ${last_backup}"
    rsync -avzh user@${source_host}:${source_dir}/${last_backup} ${target_dir}
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.