scp를 사용하여 파일의 .txt 파일 목록 전송


4

서버 A에 160 만 개의 파일이 있으며 그 중 약 20k 만 서버 B에 도달해야합니다. 대상 서버 B는 GoDaddy 공유 호스팅에 있으므로 한 번에 많은 파일을 전송하는 데 scp로 제한됩니다.

SQL 쿼리에서 20k + 파일의 .txt 파일을 생성 한 다음 해당 목록을 scp에 공급하고 싶습니다. 그렇게 할 수있는 옵션이 있습니까?

cat /proc/version 나에게 준다 Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 (mockbuild@koji.cloudlinux.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014


파일 이름이 SQL 데이터베이스에 저장되어 있습니까? rsync도 가능합니까? 이것이 바람직하다. 전송 도중에 scp가 사망하면 전송 된 것과 전송되지 않은 것을 파악해야합니다. rsync가 그 부분을 대신합니다.
Nathan Powell

@NathanPowell rsync도 저의 첫 생각이지만 GoDaddy는 SSH를 통해 새 소프트웨어를 설치하는 데 많은 어려움을 겪었습니다. 예, 파일 경로는 현재 SQL 데이터베이스에 있지만 텍스트 파일로 쉽게 추출 할 수 있습니다.
Morgan Delaney

또 다른 간단한 방법은 새 디렉토리에 해당 파일에 대한 링크를 작성하는 것입니다. 그런 다음 rsync -L파일을 원격 서버에 복사하는 데 사용하십시오. 주요 단점은 나중에 디렉토리를 정리해야한다는 것입니다. 나는 이것이이 질문에 대한 정식 답변이라고 생각하지 않기 때문에 의견으로 추가했습니다.
Lepe

답변:


7

텍스트 파일을 이미 만든 경우 다음을 수행하십시오.

cat /location/file.txt | xargs -i scp {} user@server:/location

이것은 file.txt의 출력을 한 줄씩 진행하고 scp comamand를 한 줄에 실행합니다. 이게 도움이 되길 바란다.


정말 가까워지고 있습니다, 감사합니다! 그래도이 프로세스를 진행하고 싶습니다. 라인마다 실행하면 원격 서버에서 모든 라인마다 암호를 요구할 것입니다. SSH 키를 시도했지만 성공하지 못했습니다. 아직 제대로하지 않았을 수도 있습니다. SSH 키가 해당 프로세스를위한 유일한 옵션일까요?
Morgan Delaney

이것은 훌륭하게 작동했습니다! 내가 대신 한 xargs상의 scp호출하는 것은 사용했다 xargsA의 cp다소와 같은 디렉토리에 파일을 분리 할 수있는 원격 서버에서 : cat files.txt | xargs -l bash -c 'cp $0 $1'다음 하나의 사용 scp이 디렉토리를 끌어 명령을 사용합니다. 감사합니다!
Morgan Delaney

1

제공된 대답은 훌륭합니다. 내가 사용하는 xargs -a표준 출력에 파일을 보낼 수 있습니다. 그런 다음 원래 답변과 결합했습니다.cat /location/file.txt | xargs -i scp {} user@server:/location

내 답변 :

xargs -a /location/file.txt | xargs -i scp {} user@server:/location

xargs -a과다 사용 의 이점은 무엇입니까 cat? for cat의 가용성 은 시스템에 따라 다르므로 더 이식성 이 뛰어납니다. -axargs
ephsmith

1

위의 답변은 전송 된 모든 파일에 대해 인증을 요구합니다. SCP는 SSH 위에서 실행되며 GoDaddy는 tar와 같은 SSH를 통해 다른 명령에 액세스 할 수 있습니다. 따라서 가장 좋은 방법은 tar를 ssh와 함께 사용하는 것입니다.

tar -T <file> -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

파일 목록이 STDIN에있는 경우 대신 다음을 수행 할 수 있습니다. 참고 : cat은 STDIN 생성에만 사용됩니다.

cat <file> | tar -T - -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

추가 처리 시간으로 전송 시간을 줄이려면 tar 명령에 -z 또는 -j를 추가하여 gzip 또는 bzip 압축을 각각 활성화 할 수 있습니다.


0

폴더 목록에 대해 동일한 작업을 수행하고 싶었지만 아무런 대답도 없었 xargs습니다. 결국 나는 이것을 간단하게 해결했다.

scp -r user@server:/location/{"$(cat folder_list.txt | tr '\n' ',' | sed 's/,$//')"} .

파일 목록을 셸 확장으로 전달합니다. 나는 이것이 대안 솔루션을 찾는 사람에게 도움이 될 것이라고 생각합니다.


0

ssh가 내장되어 있고를 사용하여 파일 목록에서 읽기를 지원하는 대안으로 rsync 를 고려하십시오 .--files-from

예:

rsync -av --progress --partial-dir=/tmp --files-from=file_list.txt . me@example.com:/dest

scp에 비해 장점 :

또한보십시오:

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.