FTP: 서버에서 최신 파일 가져오기

FTP: 서버에서 최신 파일 가져오기

나는 때때로 최신 파일을 생성하는 FTP 서버를 실행하고 있습니다. 파일은 다음과 같이 저장됩니다.

Home-> T22:30:10-> new.txt, 최신 파일은 (새 폴더)입니다.

Home-> T23:10:25-> new.txt(최신 시간이 포함된 새 폴더라는 점에 유의하세요)

최신 파일을 가져오려면 Linux 시스템에서 무언가(C 코드, Bash 스크립트 등 무엇이든 가능)를 구현해야 합니다.

저는 두 가지 옵션을 살펴보았습니다.

  1. libcurl을 사용하여 디렉터리 목록을 전달하고 최신 파일을 선택합니다. 이것은 정말 짜증나고 시간 소모적이며, 여전히 쉬운 방법을 찾을 수 없습니다.

  2. lftp를 사용하면 초기화 시 서버의 모든 파일을 삭제하여 lftp가 호출되어 무언가를 다운로드할 때마다 최신 상태가 되도록 합니다. (이 방법은 개념적일 뿐 실제 생활에서는 시도해본 적이 없습니다.)

더 쉬운 옵션이 있나요?

답변1

편리한 방법 중 하나는 파일을 마운트하고 일반 로컬 파일처럼 액세스하는 것입니다. FTP를 통해 액세스되는 서버의 경우 다음을 사용할 수 있습니다.컬프트프프스.

mkdir theserver
curlftpfs theserver.example.com theserver

명령줄(컴퓨터의 다른 사용자가 볼 수 있으므로 안전하지 않음) 또는 파일에서 사용자 이름과 비밀번호를 컬ftpfs에 전달해야 합니다.~/.netrc(추천). 다음은 netrc 줄의 예입니다.

machine theserver.example.com login remoteusername password swordfish

이제 FTP 서버가 컴퓨터에 디렉토리로 설치되었으므로 등과 같은 일반적인 명령을 사용할 수 ls있습니다 cp. 예를 들어 사전순으로 마지막 디렉터리에서 파일을 복사하는 경우(파일 이름에 실제로 해당 시간 이전의 날짜가 포함된 경우):

set -- theserver/remote/path/T*
eval "last=\${$#}"
cp -p -- "$last/new.txt" "/some/where/local/${last##*/}.txt"

또는 관련 파일 이름에 인쇄할 수 없는 문자나 개행 문자가 포함되어 있지 않다고 가정하고 최신 파일을 복사합니다.

cd theserver/remote/path
last=$(ls -t -- T*/new.txt | head -n 1)
cp -p -- "$last" "/some/where/local/${last%/*}.txt"

답변2

스크립트를 주기적으로 실행할 수 있는 경우 를 사용할 수 있습니다 wget -N. 다음을 참조하세요.

https://superuser.com/questions/283481/how-do-i-properly-set-wget-to-download-only-new-files


다음과 같은 스크립트를 만들 수 있습니다.

cd /var/download_here/
wget -N ftp://example.com/new.txt --ftp-user="my_user" --ftp-password="my_password"

다음 과 같은 항목을 추가합니다 crontab.

*/5 *   * * *   /path/to_script

소스 파일이 어떻게 생성되는지 참고하세요. 무언가를 쓰고 있는데 파일이 잠겨 있지 않으면 불완전한 파일을 다운로드하게 될 수 있습니다.

관련 정보