
처음으로 배치파일을 만들어 보려고 합니다. 매주 한 번씩 새로운 ID로 업데이트되는 파일을 다운로드하는 것입니다. 이것은 지금까지 제가 만든 배치 파일입니다.
@echo off
echo open SERVER> temp.txt
echo USERNAME>> temp.txt
echo PWD>> temp.txt
echo cd />> temp.txt
echo cd Events/_PPV_Barker>> temp.txt
echo binary>> temp.txt
echo get Barker*_480i.ts>> temp.txt
ftp -s:temp.txt
del temp.txt
새 파일이 서버에 업로드될 때마다 파일 이름의 시작은 이고 Barker
파일 이름은 480i.ts
. 위와 같이 *를 시도했지만 작동하지 않습니다. if 명령을 사용하여 매번 고유 ID를 가진 파일을 얻으려면 어떻게 해야 합니까? 아니면 if 명령 외에 다른 방법이 있습니까?
도움을 주시면 감사하겠습니다.
감사합니다
케샤브
답변1
제가 이해한 것이 맞다면, 서버에 접근할 때마다 새로운 파일이 생성되는데, 그 이름에 대한 자세한 내용을 모르시는 것입니다. 파일을 다운로드한 후 제거되는지, 아니면 파일 수가 점점 늘어나서 최신 파일을 선택해야 하는지는 알 수 없습니다.
가장 간단한 경우에는 파일이 하나 뿐이며 여기에서는 솔루션이 거의 정확합니다. 와일드카드가 작동할 때 get
로 바꾸는 간단한 변경이 필요합니다 .mget
*
echo mget Barker*_480i.ts>> temp.txt
이 파일 마스크와 일치하는 파일이 많으면 액세스할 때마다 점점 더 많은 수의 파일을 다운로드하게 됩니다. 빠르고 더러운 수정은 파일을 현재 디렉터리에 유지하고 읽기 전용으로 만드는 것입니다. 오류가 많이 발생하지만 새 파일이 다운로드되고 파일을 전송하는 데 드는 오버헤드가 없습니다. 이전에 받았습니다.
원격 디렉토리에 대한 전체 액세스 권한이 있는 경우 원격에서 다운로드한 파일을 삭제, 이동하거나 이름을 바꿀 수 있으므로 파일 마스크와 일치하는 파일은 매번 하나만 갖게 됩니다.
이러한 작업을 수행할 수 없는 경우 두 번의 ftp
호출이 필요합니다. 첫 번째 호출은 원격에서 디렉터리 목록을 가져온 다음 이전 원격 목록과 비교하여 새 파일을 식별하고 ftp
이를 검색하기 위해 두 번째 호출을 작성합니다 . 이를 수행하는 배치 파일은 작성하기 쉽지 않지만 가능합니다. 저는 WebCam 파일을 처리할 때 이와 같은 작업을 수행합니다.
답변2
암호와 사용자 이름을 스크립트에(일반 텍스트로!) 입력하려는 경우 명령줄 자체에서 사용하는 것이 좋습니다.
이전 파일을 다운로드한 후 로컬 복사본을 보관하고 해당 파일이나 타임스탬프를 변경하지 않는 경우 다음을 사용하여 전체 배치 파일 아이디어를 제거할 수 있습니다.Windows용 wget, --timestamping
옵션을 포함합니다. 그러면 로컬 파일의 크기와 타임스탬프를 원격 파일과 비교하여 둘 중 하나가 다르거나 로컬 파일이 존재하지 않는 경우에만 원격 파일을 다운로드합니다. 추가 혜택으로, 이전 업데이트를 놓친 경우 최신 파일뿐만 아니라 모든 새 파일을 다운로드합니다.
명령줄은 다음과 같습니다.
`wget --ftp-user=<user> --ftp-password=<password> --timestamping ftp://example.com/Events/_PPV_Barker/Barker*_480i.ts`
물론 이는 wget을 설치할 수 있는 적절한 권한이 있고 이전 복사본을 로컬에 보관한다고 가정합니다.
답변3
다음을 사용해 보세요:
mget
명령. 검색해 보니 파일이 여러 개 있다고 나오네요.
답변4
기타 프로그램/방법
사용하는 ftp
것은 안전하지 않습니다.
ftp의 보안 버전은 ftps
,FTP 보안. ftp
가능하다면 대신에 이를 사용해 보십시오 .
자신만의 스크립트를 작성하는 것은 항상 좋은 연습이지만 해당 목적을 위해 만들어진 도구가 있을 경우 이를 사용하는 것이 더 좋습니다. 더 아늑한 대안으로 사용할 수 있습니다wget
(아래 참조) 다른 서버를 원격으로 설치할 필요가 없습니다.
설치된 경우 원격 컴퓨터에 액세스할 수 있으므로 다음을 사용할 수 있습니다.rsync
도.
누락된 경우 를 사용 scp -p
하거나 sftp
ssh-key [4] .
을 계속 사용하려면 디렉토리에서 모든 파일을 맹목적으로 복사하는 옵션을 ftp
사용 하되 명령을 사용하여 파일 전송 모드를 바이너리로 미리 설정하십시오.mget
binary
Wget
wget
- 비대화형 네트워크 다운로더 [1,2] . 당신이 사용할 수있는:
wget -S -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts"
옵션 -N
은 타임스탬프를 유지하고 로컬 파일보다 최신 파일만 다운로드하는 것입니다. Linux에서 셸 확장을 방지하려면
인용문이 필요할 수 있습니다. Windows에서도 작동합니다(물론 Windows 버전의 프로그램에서도)."
더 완전한명령줄귀하의 경우 (한 줄로만) 다음과 같아야 합니다.
wget -user=USERNAME -password=PASSWORD
-N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts"
물론 비밀번호를 쓰지 않는 것이 더 현명합니다.명령줄또는 스크립트에서... 간단하게 자체 설명 옵션을 --ask-password
대신 사용할 수 있습니다.
Linux에서 더 좋은 해결책은 필요한 정보를 .wgetrc
. Windows 문서에서 해당 이름을 쉽게 찾을 수 있습니다.
$ cat ~/.wgetrc ftp_user=UsernameOnTheRemoteFTP ftp_password=PasswordOnTheRemoteFTP http_user=UsernameOnTheRemoteHTTP http_password=PasswordOnTheRemoteHTTP
wget --help
, 또는 다음에서 읽을 수 있습니다 man wget
.
-N, --타임스탬프 로컬보다 최신 파일이 아니면 파일을 다시 검색하지 마세요.
-S, --서버-응답 인쇄 서버 응답.--사용자=사용자
--password=비밀번호
FTP 및 HTTP 파일 검색 모두에 대한 사용자 이름 사용자 및 비밀번호 비밀번호를 지정하십시오. 이러한 매개변수는 FTP 연결의 경우 --ftp-user 및 --ftp-password 옵션을 사용하고 HTTP 연결의 경우 --http-user 및 --http-password 옵션을 사용하여 재정의할 수 있습니다.