wget을 사용하여 전체 FTP 디렉토리를 재귀 적으로 다운로드


93

한 호스트에서 다른 호스트로 모든 파일과 폴더를 복사하고 싶습니다. 이전 호스트의 파일은 / var / www / html에 있으며 해당 서버에 대한 FTP 액세스 권한 만 있으며 모든 파일을 TAR 할 수 없습니다. FTP를 통해 이전 호스트에 정기적으로 연결하면 / home / admin 폴더로 이동합니다.

새 서버에서 다음 명령을 실행하려고했습니다.

wget -r ftp://username:password@ip.of.old.host

그러나 내가 얻는 것은 구성된 index.html 파일입니다.

FTP를 통해 wget을 재귀 적으로 사용하기위한 올바른 구문은 무엇입니까?


2
기본적으로 wget -r의 최대 재귀 깊이는 5입니다. 더 깊은 하위 디렉토리가있는 경우이를 변경하지 않으면 무시됩니다 (매뉴얼 페이지의 -l 참조).
mikewaters

답변:


125

시도 -m에 대한--mirror

wget -m ftp://username:password@ip.of.old.host

15
보안상의 이유로에 --ask-password비밀번호가 보관되지 않도록 하는 것이 좋습니다 history.
체크섬

이거 진짜 멌있다. 매력처럼 일했다 ..
Sambhav Sharma

이는 더 나은 가시성을 위해 허용되는 답변이어야합니다.
bgondy

다운로드 할 디렉토리 경로가 포함되어 있지 않습니다. @Formoda 답변이 더 낫습니다
Wasim A.

@WasimA., 여기에 디렉토리 경로를 추가 할 수도 있습니다.wget -m ftp://username:password@ip.of.old.host/mydir/
Alex Che

37

당신은 옳습니다, 당신은 끝에 후행 *이 필요합니다 :

wget -r ftp://username:password@1.2.3.4/dir/*

공유 서버의 경우 다음과 같이 사용할 수 있습니다.

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

대부분의 공유 서버에는 username @ hostname과 같은 ftp-username이 있으므로 첫 번째 wget 명령이 작동하지 않고 두 번째 명령이 올바르게 작동합니다.


1
-m 플래그를 사용하는 것이 좋습니다
SvennD

공간 때문에 두 번째 명령이 작동하지 않는 경우가 있습니다. 이와 같은 공유 호스팅에 첫 번째 명령을 사용할 수 있습니다. ** wget -r ftp : / / username % 40host : password @ host / dir / **
Wasim A.

참고 : -m또는 -r -l inf-r의 기본 재귀 깊이는 5이므로 두 가지 중 하나를 사용해야합니다 . gnu.org/software/wget/manual/…
ndemou at

7

wget 외에도 스크립트 모드에서 lftp 를 사용할 수도 있습니다 . 다음 명령은 지정된 원격 FTP 디렉토리의 컨텐츠를 지정된 로컬 디렉토리로 미러링하고 cron 작업에 넣을 수 있습니다.

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

디렉토리에 대한 재귀를 자동으로 처리하고 데이터를 다운로드 할 원격 소스 시작 디렉토리를 지정할 수 있습니다.


5

'curlftpfs-ftp 호스트를 로컬 디렉토리로 마운트'를 사용할 수 있으며 일단 마운트되면 'cp -r'과 같은 일반 파일 도구를 사용할 수 있습니다.


curlftpfs다운 그레이드하지 않는 한 지금 주요 성능 문제가 있습니다libcurl3-gnutls
Hengjie

5

FTP에서 재귀 적으로 데이터를 다운로드하려면 아래 wget 명령을 확인하십시오.

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: 재귀 적으로 다운로드합니다.

-np: 부모 오름차순이 없습니다.

-nH: URL과 같은 이름을 가진 디렉토리 생성을 비활성화합니다. 즉 abc.xyz.com

--cut-dirs: 많은 수의 부모 디렉토리를 무시합니다. 이 옵션의 값은 명령에 따라 다릅니다.

위 명령을 실행하여 확인할 수 있습니다.



2

시도해야합니다 :

wget -r ftp://ftp:ftp@ftp.sunet.se/tst/

2

사용하다:

wget -m ftp://192.168.0.1

모든 파일과 폴더를 미러링합니다.


내가 말했듯이, FTP를 통해 로그인하면 / home / admin 폴더로 이동하고 필요한 파일은 / var / www / html에 있습니다. 제안한 명령을 실행할 때 / home / admin의 내용 만 가져옵니다 나는 그것을 실행하려고 192.168.0.1/var/www/html 하지만 그때는 CWD / 홈 / 관리자의 / var / www /에서 HTML로 시도합니다. 루트에서이 폴더로 이동하려면 어떻게해야합니까?

이 특정 문제에 대한 경험이 없지만 가정에서 / var / www / html에 대한 심볼릭 링크를 만들 수 있습니다. 그러면 192.168.0.1/html
prestomation

심볼릭 링크를 만들려고 시도했지만 로컬에서 비슷한 심볼릭 링크를 만들었습니다.

1

이것이 올바른 구문입니다. 왜 예상 한 결과를 얻지 못하는지 잘 모르겠습니다.

그것을하는 방법은 여러 가지가 있습니다. ncftp, 특히 ncftpget을 사용해보십시오


새 서버에 더 많은 소프트웨어를 설치할 수 없습니다. wvar에게 / var / www / html에서 모든 파일을 다운로드하도록 지시해서는 안됩니까? wget -r username : password@ip.of.old.host/var/www/html을 시도했지만 디렉토리를 찾을 수 없음 오류가 발생했습니다.

1

이것을 cron이나 다른 것으로 덤프하려고한다면 이해할 수 있지만 왜 일반 클라이언트와 mget *를 사용하여 서버로 ftp를 보내지 않겠습니까? 이것은 성공의 더 빠른 길일 수 있습니다.


mget *을 시도했지만 로컬 하위 폴더가 존재하지 않는다고 말하는 하위 폴더에서는 작동하지 않았습니다. 로컬 폴더를 자동으로 만들 수있는 방법이 있습니까?

클라이언트에 따라 -r 스위치는 일반적으로 트릭을 수행합니다. IE : mget -r *
dr.pooter

음. Linux의 AFAIK 표준 ftp 클라이언트는 디렉토리를 재귀 적으로 검색하도록 설계되지 않았습니다. 내 말은 -r 옵션이 없습니다. ncftp 또는 lftp와 같은 다른 클라이언트는 재귀 검색을 지원하지만 일반적으로 기본적으로 사용할 수 없습니다.
Stann

1

내가 말했듯이 FTP를 통해 로그인하면 / home / admin 폴더로 이동하고 필요한 파일은 / var / www / html에 있습니다.

나는 이것이 당신의 경우에 효과가 있다고 생각합니다 :

wget -r ftp://192.168.0.1/../../var/www/html

0

Windows 호스팅에서 사용자 이름을 brinkster / username으로 사용했기 때문에 구문을 사용하면 wget에서 오류가 발생합니다.

wget -m ftp://brinkster/username:password@ip.of.the.host

이것을 지나치려면

wget -m ftp://brinkster%2Fusername:password@ip.of.old.host

나는 Windows 호스팅 @ brinkster로 이것을 직면해야했습니다.


-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename 작업을 수행하거나 파일 이름 입력 대신 *를 추가 할 수 있습니다 : wget은 귀하의 경우 유효하지 않은 포트를 생각하게합니다.


여러 개의 상향식 답변이있는 4 년 된 질문에 대한이 답변은 새로운 것을 제공하지 않으며 재귀 적 사본에 대한 요구 사항도 생략합니다.
Sven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.