名前が若干変更される可能性がある場合は、wgetを使用してファイルをインポートしてください。

名前が若干変更される可能性がある場合は、wgetを使用してファイルをインポートしてください。

私は5つの政府ソースからデータをインポートし、会社の大規模データベースにマージするプログラムを持っています。 wgetを使用してファイルを検索します。しかし、ソースの1つが更新されるたびに名前が変更されることがわかりました。

たとえば、最後にファイルを受け取ったときのファイル名はでしたmyfile150727.flatfile。今日のプログラムを実行しようとすると、終了ステータスは8でしたno such file。手動でFTP経由でファイル名があることを確認しましたmyfile150914.flatfile。明らかに、ファイル名は最後の更新日に応じて変更されます。

これを考慮してスクリプトを修正し、ファイルを自動的にダウンロードできますか?

ベストアンサー1

はい、しかし、詳細はファイル名がどのように変更されるかによって異なります。常に今日の日付の場合は、その日付をインポートするようにスクリプトに指示してください。

filename=myfile"$(date +%y%m%d)".flatfile
wget ftp://example.com/"$file"

または、毎日更新されないというファイルが1つしかない場合は、次のmyfileWHATEVER.flatfileものをインポートします。

wget "ftp://example.com/myfile*.flatfile"

同じ名前のファイルが多い場合は、それらのファイルをすべてダウンロードして最新のファイルのみを保持できます。

wget -N "ftp://example.com/myfile*.flatfile"
## Find the newest file
for file in myfile*.flatfile; do
    [[ "$file" -nt "$newest" ]] && newest="$file";
done
## Delete the rest
for file in myfile*.flatfile; do
    [[ "$file" != "$newest" ]] && rm "$file"
done

または、ファイル名から日付を抽出することもできます。

wget -N "ftp://example.com/myfile*.flatfile"
for file in myfile*.flatfile; do
    fdate=$(basename "${file//myfile}" .flatfile)
    [[ "$fdate" -gt $(basename "${nfile//myfile}" .flatfile) ]] && nfile="$file"
done
for file in myfile*.flatfile; do
    [[ "$file" = "$nfile" ]] || rm "$file"
done

上記は、変更日が同じ場合に複数のファイルを保存します。

おすすめ記事