Unix에서 lftp를 사용하여 원격에서 로컬로 파일 복사

Unix에서 lftp를 사용하여 원격에서 로컬로 파일 복사

원래 서버 오류에 이 글을 게시했지만 큰 관심을 받지 못했습니다. 여기 누군가가 도움을 줄 수 있기를 바랍니다.

원격 FTP 서버에서 로컬 디렉토리로 일부 파일을 복사하는 스크립트를 작성하려고 합니다. 결국 수정된 날짜별로 필터링할 수 있기를 원하지만 지금은 간단한 디렉터리 복사본에 대한 핸들을 얻고 싶습니다. 나는 lftp 미러 명령을 사용하는 많은 예를 보았지만 지금까지는 그 중 어느 것도 작동하지 않는 것 같습니다. 현재 다음과 같은 명령이 있습니다.

lftp -u myuser ftp.myserver.net -e 'set ftp:ssl-allow no;mirror -c --verbose eyerep-test/outgoing/archive ~/eyerep-files/outgoing;quit;'

명령을 실행하면 서버에 연결되어 미러 명령을 실행하려고 시도하지만 완료되면 내 컴퓨터의 ~/eyerep-files/outgoing 폴더에 복사된 파일이 표시되지 않습니다. 또한 lftp를 사용하여 원격에 연결하고 한 번에 하나의 명령을 실행해 보았습니다. 나는 같은 결과를 얻었습니다. 내가 여기서 뭘 잘못하고 있는지 잘 모르겠습니다. 이 명령이 작동하지 않는 이유를 설명할 수 있는 사람이 있나요?

고쳐 쓰다: 이것이 원격 서버에 문제가 되지 않는지 확인하기 위해 공용 FTP 서버에 대해 몇 가지 명령을 실행하여 무슨 일이 일어나고 있는지 확인하기로 결정했습니다.

난 달린다:

cd /home/pbuchheit/eyerep-files
lftp apache.cs.utah.edu
cd apache.org/zzz
mirror -c --transfer-all --verbose=2 --script=cmd.log
quit

다음 명령은 cmd.log 파일에 기록되지만 디렉터리를 살펴보면 실제로 복사해야 할 파일이나 디렉터리가 표시되지 않습니다.

get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/HEADER
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/HEADER.html
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/HEADER.txt
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/README
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/README.html
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/README.txt
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/checkrev.py
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/find-ls.gz
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/status.json
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/time.txt
get -O /home/pbuchheit/eyerep-files ftp://apache.cs.utah.edu/apache.org/zzz/update-files.sh
mkdir file:/home/pbuchheit/eyerep-files/checker-tests
get -O /home/pbuchheit/eyerep-files/checker-tests ftp://apache.cs.utah.edu/apache.org/zzz/checker-tests/README.html
chmod 644 file:/home/pbuchheit/eyerep-files/checker-tests/README.html
mkdir file:/home/pbuchheit/eyerep-files/mirror-tests
get -O /home/pbuchheit/eyerep-files/mirror-tests ftp://apache.cs.utah.edu/apache.org/zzz/mirror-tests/1mb.img
get -O /home/pbuchheit/eyerep-files/mirror-tests ftp://apache.cs.utah.edu/apache.org/zzz/mirror-tests/1mb.img.7z
get -O /home/pbuchheit/eyerep-files/mirror-tests ftp://apache.cs.utah.edu/apache.org/zzz/mirror-tests/1mb.img.bz2
get -O /home/pbuchheit/eyerep-files/mirror-tests ftp://apache.cs.utah.edu/apache.org/zzz/mirror-tests/1mb.img.tar.gz
get -O /home/pbuchheit/eyerep-files/mirror-tests ftp://apache.cs.utah.edu/apache.org/zzz/mirror-tests/1mb.img.tgz
get -O /home/pbuchheit/eyerep-files/mirror-tests ftp://apache.cs.utah.edu/apache.org/zzz/mirror-tests/1mb.img.zip
get -O /home/pbuchheit/eyerep-files/mirror-tests ftp://apache.cs.utah.edu/apache.org/zzz/mirror-tests/Readme.txt
mkdir file:/home/pbuchheit/eyerep-files/mirror-tests/redirect-test
chmod 644 file:/home/pbuchheit/eyerep-files/mirror-tests/1mb.img
chmod 644 file:/home/pbuchheit/eyerep-files/mirror-tests/1mb.img.7z
chmod 644 file:/home/pbuchheit/eyerep-files/mirror-tests/1mb.img.bz2
chmod 644 file:/home/pbuchheit/eyerep-files/mirror-tests/1mb.img.tar.gz
chmod 644 file:/home/pbuchheit/eyerep-files/mirror-tests/1mb.img.tgz
chmod 644 file:/home/pbuchheit/eyerep-files/mirror-tests/1mb.img.zip
chmod 644 file:/home/pbuchheit/eyerep-files/mirror-tests/Readme.txt
chmod 755 file:/home/pbuchheit/eyerep-files/mirror-tests/redirect-test
mkdir file:/home/pbuchheit/eyerep-files/perms
get -O /home/pbuchheit/eyerep-files/perms ftp://apache.cs.utah.edu/apache.org/zzz/perms/file444
get -O /home/pbuchheit/eyerep-files/perms ftp://apache.cs.utah.edu/apache.org/zzz/perms/file644
get -O /home/pbuchheit/eyerep-files/perms ftp://apache.cs.utah.edu/apache.org/zzz/perms/file664
mkdir file:/home/pbuchheit/eyerep-files/perms/dir555
get -O /home/pbuchheit/eyerep-files/perms/dir555 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir555/file444
get -O /home/pbuchheit/eyerep-files/perms/dir555 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir555/file644
get -O /home/pbuchheit/eyerep-files/perms/dir555 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir555/file664
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir555/file444
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir555/file644
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir555/file664
mkdir file:/home/pbuchheit/eyerep-files/perms/dir755
get -O /home/pbuchheit/eyerep-files/perms/dir755 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir755/file444
get -O /home/pbuchheit/eyerep-files/perms/dir755 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir755/file644
get -O /home/pbuchheit/eyerep-files/perms/dir755 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir755/file664
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir755/file444
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir755/file644
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir755/file664
mkdir file:/home/pbuchheit/eyerep-files/perms/dir775
get -O /home/pbuchheit/eyerep-files/perms/dir775 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir775/file444
get -O /home/pbuchheit/eyerep-files/perms/dir775 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir775/file644
get -O /home/pbuchheit/eyerep-files/perms/dir775 ftp://apache.cs.utah.edu/apache.org/zzz/perms/dir775/file664
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir775/file444
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir775/file644
chmod 644 file:/home/pbuchheit/eyerep-files/perms/dir775/file664
mkdir file:/home/pbuchheit/eyerep-files/perms/dr-xr-xr-x
get -O /home/pbuchheit/eyerep-files/perms/dr-xr-xr-x ftp://apache.cs.utah.edu/apache.org/zzz/perms/dr-xr-xr-x/r-xr-xr-x
chmod 755 file:/home/pbuchheit/eyerep-files/perms/dr-xr-xr-x/r-xr-xr-x
chmod 644 file:/home/pbuchheit/eyerep-files/perms/file444
chmod 644 file:/home/pbuchheit/eyerep-files/perms/file644
chmod 644 file:/home/pbuchheit/eyerep-files/perms/file664
chmod 755 file:/home/pbuchheit/eyerep-files/perms/dir555
chmod 755 file:/home/pbuchheit/eyerep-files/perms/dir755
chmod 755 file:/home/pbuchheit/eyerep-files/perms/dir775
chmod 755 file:/home/pbuchheit/eyerep-files/perms/dr-xr-xr-x
mkdir file:/home/pbuchheit/eyerep-files/rsync-module
get -O /home/pbuchheit/eyerep-files/rsync-module ftp://apache.cs.utah.edu/apache.org/zzz/rsync-module/apache-dist
chmod 644 file:/home/pbuchheit/eyerep-files/rsync-module/apache-dist
chmod 644 file:/home/pbuchheit/eyerep-files/HEADER
chmod 644 file:/home/pbuchheit/eyerep-files/HEADER.html
chmod 644 file:/home/pbuchheit/eyerep-files/HEADER.txt
chmod 644 file:/home/pbuchheit/eyerep-files/README
chmod 644 file:/home/pbuchheit/eyerep-files/README.html
chmod 644 file:/home/pbuchheit/eyerep-files/README.txt
chmod 755 file:/home/pbuchheit/eyerep-files/checkrev.py
chmod 755 file:/home/pbuchheit/eyerep-files/update-files.sh
chmod 755 file:/home/pbuchheit/eyerep-files/checker-tests
chmod 755 file:/home/pbuchheit/eyerep-files/mirror-tests
chmod 755 file:/home/pbuchheit/eyerep-files/perms
chmod 755 file:/home/pbuchheit/eyerep-files/rsync-module

업데이트 2

@aviro가 제안한 대로, 나는 뒤에서 무슨 일이 일어나고 있는지 보기 위해 strace를 실행해 보았습니다. 명령은 다음과 같습니다:

strace -f -yy -e 추적=파일 -q -o lftp.strace lftp[이메일 보호됨]

미러 명령을 실행하면 다음과 같은 결과가 출력됩니다.

429   openat(AT_FDCWD, ".", O_RDONLY|O_DIRECTORY) = 5</home/pbuchheit/eyerep-files>
429   getcwd("/home/pbuchheit/eyerep-files", 4096) = 29
429   chdir("/home/pbuchheit/eyerep-files") = 0
429   chdir("/home/pbuchheit/eyerep-files") = 0
429   chdir("/home/pbuchheit/eyerep-files") = 0
429   openat(AT_FDCWD, "/home/pbuchheit/eyerep-files", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 6</home/pbuchheit/eyerep-files>
429   lstat("/home/pbuchheit/eyerep-files/.", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
429   openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 6</etc/passwd>
429   openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 6</etc/group>
429   lstat("/home/pbuchheit/eyerep-files/..", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
429   lstat("/home/pbuchheit/eyerep-files/cmd.log", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
429   lstat("/home/pbuchheit/eyerep-files/lftp.strace", {st_mode=S_IFREG|0664, st_size=14407, ...}) = 0
429   openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 5</usr/share/zoneinfo/posixrules>
429   stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3545, ...}) = 0
429   stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3545, ...}) = 0

나머지 출력은 마지막 줄을 수천 번 반복한 것에 불과합니다.

업데이트 3:

나는 이것을 테스트하는 데 도움을 주기 위해 팀에서 다른 사람들을 끌어 들였습니다. 그는 나와 동일한 Ubuntu 버전을 사용하는 VM을 가지고 있었고 lftp를 테스트했을 때 동일한 결과를 얻었습니다. 그는 또한 이전 버전(16.04)에서도 테스트했고 그곳에서도 작동했습니다. 이전 버전에서 작동하기 때문에 시간대 설정과 관련이 있는 것 같지만 아직 해결 방법을 잘 모르겠습니다.

관련 정보