한 PC에서 다른 PC로 많은 파일을 전송해야합니다 (두 Linux 모두). 나는 그것을 사용 scp
하고 싶지만 scp
한 번에 하나의 파일 만 전송할 수 있습니다.
어떻게해야합니까?
나는 가지고있다
- rsync 또는 다른 프로토콜을 사용할 수 없음
- 암호가없는 인증서를 사용할 가능성이 없습니다 (그러나 암호가있는 인증서가있는 경우)
- 전송할 파일 목록 및 다른 서버에있는 파일의 대상 경로가있는 목록
- 파일은 많은 디렉토리에 분산되어 있으며 복사하려는 디렉토리의 모든 파일이 아닙니다.
가능한 경우 대역폭을 절약하기 위해 투명하게 gzip 및 ungzip을 사용하고 싶습니다!
이게 가능해?
답변
사용 tar
:
tar cvzf - -T list_of_filenames | ssh hostname tar xzf -
답변
scp를 사용하고 싶지만 scp는 한 번에 하나의 파일 만 전송할 수 있습니다.
적어도 scp
대부분의 Linux 배포판에 포함 된 OpenSSH가 제공 하는 명령에 대해서는 사실이 아니라고 확신합니다 .
나는 scp file1 file2 ... fileN user@host:/destination/directory/
상당히 자주 사용 합니다.
투명한 압축을 위해 SSH 프로토콜에는이 기능이 내장되어 있으며 명령 행에 옵션을 scp
제공하면이를 사용할 수 있습니다 -C
. 비슷한 작은 파일이 많으면 akira가 제안한 tar + gz 옵션이 scp
각 파일을 별도의 엔티티로 압축하는 파일 간의 유사성을 사용할 수 있으므로 더 나은 압축을 얻을 수 있습니다 . 나는 일반적으로 scp를 사용하는 것을 선호하지만 부분 전송을 재개하는 것이 더 쉽기 때문에 (또는이 상황에서 질문자가 옵션을 가지고 있지 않다는 것을 알고 있지만) rsync
tar + gz 옵션의 전체를 다시 시작하고 공유하는 것이 더 쉽기 때문에 스트림 압축 장점.
답변
scp -r yourdir otherhost:/otherdir
작동 하지 않습니까?
이것을 시도하십시오 :
tar cfz - . | ssh otherhost "cd /mydir; tar xvzf -"
z
타르에 -flag 압축을 수행합니다. 또는 -C를 사용하여 ssh를 사용할 수 있습니다.
tar cf - . | ssh -C otherhost "cd /mydir; tar xvf -"
답변
RHEL5에서는 특수 문자 (공백과 같은)가 포함 된 파일 목록을 안전하게 복사 할 수있는 유일한 방법이 있습니다. 쉘 스크립트를 작성하고 다음을 포함하십시오.
FILE="/path/filename"
while read line; do
scp "$line" username@servername:/destination/
done < $FILE
답변
많은 문제없이 할 수 있습니다.
각 파일 옆에 호스트 이름으로 파일 목록을 만들고 scp가 잘 파싱하는 것처럼 보입니다. 즉.
srchost=`hostname`
myfiles="${srchost}:~/.bashrc ${srchost}:~/.bash_profile ${srchost}:~/.vimrc ${srchost}:~/.viminfo ${srchost}:~/.toprc ${srchost}:~/.dir_colors"
scp -v $myfiles $HOME
Scp는이 구문으로 잘 작동하는 것 같습니다. 각 파일 옆에 호스트 이름없이 시도했지만 첫 번째 파일 다음에 실패했습니다. 나는 이것에 대해 이전에 사용한 또 다른 구문을 회상하고 그것을 찾으면 게시 할 것입니다.
답변
부분적으로 이와 같은 명령을 사용하여 파일 목록에서 아카이브를 만드는 것이 좋습니다.
tar -cvf allfiles.tar -L mylist.txt
그런 다음 scp를 사용하여 아카이브를 다운로드하십시오.
scp user @ remotehost : ~ / allfiles.tar
/programming/8033857/tar-archiving-that-takes-input-from-a-list-of-files