他の種類のファイルに加えて、リモートサーバー(SCPサポート)には.docファイルセットがあります。
私はスクリプトを見ました:
FILE=`ssh abc@xyz ls -ht /tmp/*.doc | head -n 1`
rsync -avz -e ssh abc@xyz:"$FILE" .
リモートサーバーから最新のファイルをコピーするには、「head -n 1」パラメータを使用します。ところで、「head -n 3」パラメータを使用してもリモートサーバーから最新の3つのファイルをコピーできないことがわかりました。
答え1
abc
ログインシェルがxyz
次のような場合zsh
:
ssh abc@xyz 'cd /tmp && tar cf - ./*.doc(.LM-100om[1,3]) | gzip -3' |
gunzip | tar xvf -
そうでない場合zsh
(zsh
インストールされている場合):
ssh abc@xyz "cd /tmp && exec zsh -c 'tar cf - ./*.doc(.LM-100om[1,3]) | gzip -3'" |
gunzip | tar xvf -
/tmp
とにかく、(またはグローバルに書き込み可能なディレクトリ)は地雷原であることに注意してください。上記では、(.LM-100)
100MiB未満の一般的なファイル(含む)のみを選択し、tar
シンボリックリンクをたどるか、デバイスまたは名前付きパイプの内容を読み取らないように非常に注意を払いました。しかし、まだ誰かがファイルをいくつかのテビバイトに拡大することができる競争条件があります。拡張グローブとtar
実行中のコマンド。
もちろん、.doc
拡張子を持つマルウェアは誰でも削除できるため、これらのダウンロードには慎重に/tmp
対処する必要があります。
にあるよりもプライベートディレクトリにある方が良いです/tmp
。
答え2
ls
N行を切り捨てて1行に1つのファイル名を出力しhead
ますが、rsync
ファイルやglobを処理すると予想される場合は、次のようにできます。
FILES=`ssh acb@xyz 'ls -t /tmp/*.doc' | head -n 3 | tr '\n' ','`
rsync -avz -e ssh abc@xyz:"\{$FILES\}" .