私は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
上記は、変更日が同じ場合に複数のファイルを保存します。