web-dev-qa-db-ja.com

wgetまたは他の方法を使用したftpサーバーからの最新ファイル

Wgetを使用してftpサーバーで利用可能な最新のファイルをダウンロードするにはどうすればよいですか。以下のコマンドを使用している場合は、すべてのファイルが提供されます。

wget ftp:// id:password @ ftpserver/dir / *

よろしく、ラム。

3
Ram

答えは、wgetや私が知っている他の単一のツールだけを使用してこれを行うことはおそらくできないということです。

おそらくあなたがする必要があるのは、ftpサーバーからディレクトリリストを要求するwget/curl/whateverを使用するスクリプトを書くことです。次に、スクリプトは、ファイルの名前またはその他の基準に基づいて、適切なファイルを選択して取得します。

6
Zoredache

ローカルにあるものより古いファイルを無視するようにwgetに「-N」オプションを追加するだけです。 「-nc」を追加して、ファイルが既に存在する場合は、FTP上のファイルが新しい場合でも、ファイルを完全にスキップすることもできます。

wget -N ftp:// id:password @ ftpserver/dir / *

6
Drakia

私の解決策はこれです:

curl 'ftp://server.de/dir/'$(curl 'ftp://server.de/dir/' 2>/dev/null | tail -1 | awk '{print $(NF)}')
2
Mathias

ダウンロードするファイルを指定してみてください。 「*」を使用すると、ディレクトリ「dir」内のすべてのファイルがダウンロードされます。

例:

wget ftp://gnjilux.cc.fer.hr/welcome.msg

...上記のサーバーからファイル「welcome.msg」を正確にダウンロードします。

Wget-Manual を確認してください。

更新:問題が発生するかどうかはわかりません。リモートサーバー(FTPデーモンを実行しているマシン)のコンテンツをローカルサーバーと同期しようとしていますか? FTP経由の rsync 機能のようなものをお探しですか?はいの場合は、 ftpsync を試すことができます(この場合、wgetだけでは役に立ちません)。

1
Javier

たぶん、私の理想的ではないが単純な解決策は誰かに役立つでしょう。

まず、インストールしましたproftpd。/ftpディレクトリツリーの例を次に示します。

/ftp/
/ftp/file1
/ftp/file1/subfile1
/ftp/file1/subfile2
/ftp/file2

次に、このスクリプトを毎分実行するタスクをcrontabに追加しました。

PACKAGES=$(find /ftp/* -type d -not -name 'lost+found')
for PACKAGE in "${PACKAGES[@]}"; do
  echo $(ls -I 'latest' -Atp "${PACKAGE}" | grep -v '/' | head -n 1) > "${PACKAGE}"/latest
done

したがって、すべてのファイル(または私の場合はパッケージ)に対して、個別のディレクトリを作成する必要があり、そのディレクトリに最新のファイルの名前を含むファイル「latest」があります。ファイルの最新バージョンを取得したい場合は、次のコマンドを実行するだけです。

wget ftp://"${FTP_SRV}"/"${FILE}"/$(curl -s ftp://"${FTP_SRV}"/"${FILE}"/latest)
0
HeroFromEarth