저는 5개 정부 소스에서 데이터를 가져와 회사의 대규모 데이터베이스에 병합하는 프로그램을 가지고 있습니다. wget을 사용하여 파일을 검색합니다. 그러나 소스 중 하나가 업데이트될 때마다 이름이 변경된다는 사실을 발견했습니다.
예를 들어, 마지막으로 파일을 받았을 때 파일 이름은 이었습니다 myfile150727.flatfile
. 오늘 프로그램을 실행하려고 하면 종료 상태가 8 이었습니다 no such file
. 수동으로 FTP를 통해 파일 이름이 이라는 것을 확인했습니다 myfile150914.flatfile
. 분명히 파일 이름은 마지막 업데이트 날짜에 따라 변경됩니다.
이 사실을 고려하여 스크립트를 수정하고 파일을 자동으로 다운로드할 수 있습니까?
답변1
예, 하지만 자세한 내용은 파일 이름이 어떻게 변경되는지에 따라 다릅니다. 항상 오늘 날짜인 경우 해당 날짜를 가져오도록 스크립트에 지시하세요.
filename=myfile"$(date +%y%m%d)".flatfile
wget ftp://example.com/"$file"
또는 매일 업데이트되지 않고 라는 파일이 하나만 있는 경우 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
위의 내용은 수정 날짜가 동일한 경우 여러 파일을 보존합니다.
답변2
그것은 마치
for site in site1.com site2.com
do
mkdir -p $site
ftp -in <<EOF
connect $site
user archemar foo
lcd $site
cd /path/to/remote/file
mget myfile*.fileflat
quit
EOF
done
user archemar foo
사용자 이름과 비밀번호로 바꾸 거나user ftp
허용되는 경우 익명 FTP로 바꾸세요.cd /path/to/remote/file
명백한 것으로 교체- 이렇게 하면 기타 *.Flatfile이 적절한 사이트 디렉터리에 배치됩니다. 이름이 고유한 경우
mkdir $site
및 를 제거합니다lcd $site
. - 업데이트 프로세스에 따라
rm
전송하기 전에 이 작업을 수행할 수도 있습니다.