FTP:サーバーから最新のファイルをインポートする

FTP:サーバーから最新のファイルをインポートする

私は時々最新のファイルを生成するFTPサーバーを実行しています。ファイルは次のように保存されます。

Home-> T22:30:10-> new.txt、最新のファイルは(新しいフォルダ)です。

Home-> T23:10:25-> new.txt(最新の時間を含む新しいフォルダであることに注意してください)

最新のファイルをインポートするには、Linuxシステムで何か(Cコード、Bashスクリプトなど)を実装する必要があります。

私は2つのオプションを見ました。

  1. libcurlを使用してディレクトリリストを渡し、最新のファイルを選択します。これは本当に迷惑で時間がかかり、まだ簡単な方法を見つけることができません。

  2. lftpを使用すると、初期化時にサーバー上のすべてのファイルを削除してlftpが呼び出され、何かをダウンロードするたびに最新の状態になります。 (この方法は概念的であり、実際の生活では試したことはありません。)

より簡単なオプションがありますか?

答え1

便利な方法の1つは、ファイルをマウントし、通常のローカルファイルのようにアクセスすることです。 FTP経由でアクセスされるサーバーの場合は、次のものを使用できます。カルフトププス

mkdir theserver
curlftpfs theserver.example.com theserver

コマンドライン(コンピュータの他のユーザーが見ることができるので安全ではありません)またはファイルからユーザー名とパスワードをカルftpfsに渡す必要があります。~/.netrc(おすすめ)。以下はnetrc行の例です。

machine theserver.example.com login remoteusername password swordfish

これで、FTPサーバーがコンピュータにディレクトリとしてインストールされているので、などの一般的なコマンドを使用できlsますcp。たとえば、アルファベット順に最後のディレクトリからファイルをコピーする場合(ファイル名に実際にその時刻より前の日付が含まれている場合):

set -- theserver/remote/path/T*
eval "last=\${$#}"
cp -p -- "$last/new.txt" "/some/where/local/${last##*/}.txt"

または、関連ファイル名に印刷できない文字や改行文字が含まれていないとし、最新のファイルをコピーします。

cd theserver/remote/path
last=$(ls -t -- T*/new.txt | head -n 1)
cp -p -- "$last" "/some/where/local/${last%/*}.txt"

答え2

スクリプトを定期的に実行できる場合を使用できますwget -N。以下を参照してください。

https://superuser.com/questions/283481/how-do-i-properly-set-wget-to-download-only-new-files


次のスクリプトを作成できます。

cd /var/download_here/
wget -N ftp://example.com/new.txt --ftp-user="my_user" --ftp-password="my_password"

次の項目を追加しますcrontab

*/5 *   * * *   /path/to_script

ソースファイルの生成方法をご覧ください。何かを書いていてファイルがロックされていない場合は、不完全なファイルをダウンロードする可能性があります。

関連情報