나는 때때로 최신 파일을 생성하는 FTP 서버를 실행하고 있습니다. 파일은 다음과 같이 저장됩니다.
Home
-> T22:30:10
-> new.txt
, 최신 파일은 (새 폴더)입니다.
Home
-> T23:10:25
-> new.txt
(최신 시간이 포함된 새 폴더라는 점에 유의하세요)
최신 파일을 가져오려면 Linux 시스템에서 무언가(C 코드, Bash 스크립트 등 무엇이든 가능)를 구현해야 합니다.
저는 두 가지 옵션을 살펴보았습니다.
libcurl을 사용하여 디렉터리 목록을 전달하고 최신 파일을 선택합니다. 이것은 정말 짜증나고 시간 소모적이며, 여전히 쉬운 방법을 찾을 수 없습니다.
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
소스 파일이 어떻게 생성되는지 참고하세요. 무언가를 쓰고 있는데 파일이 잠겨 있지 않으면 불완전한 파일을 다운로드하게 될 수 있습니다.