이름이 약간 변경될 수 있는 경우 wget을 사용하여 파일을 가져옵니다.

이름이 약간 변경될 수 있는 경우 wget을 사용하여 파일을 가져옵니다.

저는 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전송하기 전에 이 작업을 수행할 수도 있습니다.

관련 정보