
저는 ftp 스크립트에서 mget를 사용하고 있으며 mget이 로컬 디렉토리에 이미 존재하는 파일을 가져오는 것을 건너뛰기를 원합니다. 그런 방법이 있나요? 그렇다면 로컬 파일과 원격 파일이 다른 경우 mget이 진행할 수 있는 방법이 있습니까?
편집: 둘 다 훌륭한 답변입니다. 두 번째 답변이 예제를 제공했기 때문에 선택했으며 다음과 같이 수정했습니다.
lftp $HOST -u $USER,$PASSWD -e 'mirror --verbose=3 --only-newer --include "my-extended-regex-expression-of-include-file-patterns" / transfer/'
답변1
다양한 구현이 있습니다 ftp
. 다운로드하기 전에 로컬 파일을 확인하는 명령이 ftp
있는 프로그램 을 모릅니다 .mget
FTP를 통해 파일을 다운로드할 수 있고 실제로 원하는 파일을 다운로드할 수 있는 프로그램이 많이 있습니다.
-
lftp ftp.example.com <<EOF mirror --only-missing --file=/path/to/*.ext . EOF
최신 파일
--only-missing
만 다운로드하는 것을 대체합니다 .--only-newer
-
wget -nc 'ftp://ftp.example.com/path/to/*.ext'
-N
최신 파일만 다운로드하는 옵션을 추가합니다.
또는 복잡한 작업을 수행하는 가장 좋은 솔루션은 원격 파일 시스템을 마운트한 다음 일반 파일 조작 도구를 사용하는 것입니다. 다음 명령을 사용하여 FTP 디렉터리를 마운트할 수 있습니다.컬프트프프스.
mkdir mnt
curlftpfs ftp://ftp.example.com/ mnt
rsync -a --ignore-existing mnt/*.ext . # replace --ignore-existing by -u to download only newer files
fusermount -u mnt
답변2
ftp
이 작업은 자체적으로 수행되지 않습니다(대부분의 변형도 마찬가지 sftp
). 이는 rsync
일반적 으로 lftp
.
그래도 문제가 해결되지 않으면 첫 번째 부분(기존 파일)에 대해 구성할 수 있는 rsync
최소한 일부 응용 프로그램이 있습니다 . ftp
예를 들어:
그러나 (이 스크립트 및 관련 Perl 스크립트를 사용하여) 조사해 볼 가치가 있습니다 rsync
.lftp
그리고