1

SFTP サーバーとの対話中に奇妙な問題が発生しました。私がする必要があるのは、ログインして、特定の基準を満たす最新のファイルを見つけてダウンロードすることです。これはすべてbashスクリプトからです。これまでの方法は、実行ls -ltして出力の最初の行を取得するだけでした。

echo "ls -lt" > tmp.sftp
sftp -b tmp.sftp user@ftps.server.com:/inbox 1>sftp.log 2>&1

FILE=$(cat sftp.log | sed -n 3p |  awk '{print $NF}')

echo "get $FILE" > tmp.sftp
sftp -b tmp.sftp user@ftps.server.com:/inbox

ただし、最近、他のファイル (私は気にしない) を同じフォルダーに入れ始めました。コードを dols -lt blah*に変更してみましたが、なぜかワイルドカード フィルタがあると、ファイル リストが逆順にソートされてしまいます...

これを解決する方法はばかげているように感じます。もっと良い方法があるはずです。私はどちらに見えますか?カール?え?ありがとう!

4

2 に答える 2

1

-rフラグを追加すると、 lsの出力の順序を逆にすることができます。

ls -ltr
于 2013-03-28T01:39:24.747 に答える
0

あなたができるならsftp、あなたはすることができsshますscp。それらはすべて同じデーモンプロセスを使用しますsshd::

これにより、すべてを実行しようとするよりも、タスクが少し簡単になる場合がありますscp

を使用sshすると、リモートコマンドを実行して、そのリモートコマンドをシステムに報告させることができます。

$ ssh user@ftps.server.com ls -lt inbox

これにより、リモートシステム上のファイルが名前順に一覧表示されます。ちなみに、なぜコマンド全体の接続が含ま-lれているのlsですか?なぜこれを単純に行わないのですか?

$ ls -t | head -1

それはあなたのために最新のファイルをリストします、そしてあなたはそれをリモートで行うことができます:

$ FILE=$(ssh user@ftps.server.com ls -t inbox | head -1)

そのファイルを入手したら、scpそれをコピーするために使用できます。

$ scp user@ftps.server.com:/ inbox /$FILE。

于 2013-03-20T01:02:46.390 に答える