ssh를 통한 특정 파일과 디렉토리를 제외한 모든 파일과 디렉토리를 어떻게 복사합니까?


23

Linux 명령 행을 사용하여 scp명령을 사용하여 특정 디렉토리에서 모든 파일과 폴더를 복사합니다. 그러나 나는 tiny_mce폴더 처럼 거의 변경하지 않는 것을 복사하기 위해 대역폭을 소비하고 싶지 않습니다 . 모든 것을 복사하지만 짧은 폴더 목록을 건너 뛰는 트릭은 무엇입니까?

답변:


19

rsync잘 작동하며 대부분의 경우 전송 프로토콜로 SSH를 자동으로 사용합니다. 파일을 비교하고 변경된 파일 만 업로드합니다. 그러나 제외 목록 을 사용하여 트리에서 동기화되지 않아야하는 파일을 지정할 수도 있습니다 .


rsync는 SSH를 자동으로 사용 하지 않습니다.이를 위해서는 "-e ssh"플래그를 제공해야합니다.

4
그렇습니다. Rsync 2.6.0 릴리스-기본 원격 쉘은 다른 것을 기본값으로 만들지 않는다고 구성하지 않는 한 "ssh"입니다. samba.org/rsync

12

변경된 파일 만 복사하고 ssh에서도 작동하는 rsync 를 시도 할 수 있습니다.


9

사용하는 rsync --exclude것이 더 확실한 선택이지만, 실제로 몇 개의 파일이나 폴더를 보내고 제외 할 특정 항목을 원한다면을 사용하여 쉘 글 로빙을 사용할 수 있습니다 scp. 먼저 쉘에 올바른 글 로빙 옵션이 설정되어 있는지 확인하십시오. bash 실행 shopt -s extglob및 zsh 사용 setopt ksh_glob. 그런 다음과 같은 것 :

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

... 주어진 패턴과 일치하는 것을 제외하고 소스 폴더의 모든 것을 복사합니다. 분명히 그 부분으로 창의력을 발휘할 수 있습니다.


7

rsync 좋은 해결책이지만 대안을 찾고 있다면 :

"test"디렉토리에 "foo, bar, baz"디렉토리가 있다고 가정 해 봅시다. 이 디렉토리에는 여러 가지 파일 형식이 있습니다.

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

PNG를 제외한 모든 것을 복사하고 싶습니다

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

이 예제에서 명령은 모든 파일을 동일한 대상 디렉토리에 넣습니다. 이것은 원하는 동작이 아닐 수 있습니다.


1
이 답변은 관련된 파일 및 디렉토리 이름에 쉘 특수 문자 (공백 또는 \[*?)가 포함되지 않은 경우에만 작동합니다 .
Gilles 'SO- 악의를 멈춰라'

3

시도해 볼만한 훌륭한 도구는 "lftp"입니다.

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

ssh를 통해 RSync를 사용할 수도 있습니다

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

작동해야합니다.


0

방금 언젠가 재 동기화선호하는 방법을 쓰기를 마쳤 습니다.

  • 전송을 위해 ssh 이외의 데몬이 필요하지 않습니다.
  • 언제든지 한 쪽에서 파일을 수정할 수 있습니다. 여러 마스터가 쉽게 한쪽에서 동기화 요청 만 푸시하면됩니다.
  • 나는 그것이 modtimes, 속성 / 권한, 소프트 링크 등에 관해서는 stickler입니다. 그것에 아무런 문제가 없습니다. 하나의 프로젝트에는 4 개의 미러를 사용하고 하나는 cygwin 호스트입니다. 내 예제 crontab 설정을 참조하십시오.
  • 과 같은 제외를 지원합니다 *.bak. 구성 파일의 샘플

0

보안 복사 사용 -scp

scp -r file user@host:

많은 파일을 복사하려면

scp /directory/* user@host:destinationPath

일부 파일을 복사하려면

scp /directory/!(*.doc) user@host:destinationPath

.doc 파일을 제외한 디렉토리의 내용을 복사 합니다.


0

나는 당신에게 rsync를 추천합니다.

rsync -vra --exclude = "제외하고자하는 대상"-e ssh 폴더 user @ remotehost : / folder


0

이것이 대상 서버에서 실행할 때 도움이되었습니다.

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude

0

tiny_mce디렉토리 를 무시하기 위해 두 단계로 수행 할 수 있습니다 . 모든 디렉토리가 소문자로 시작한다고 가정합니다.

scp -r USER@HOSTNAME:~/FOLDER/[a-s]* .
scp -r USER@HOSTNAME:~/FOLDER/[u-z]* .

또한 USER, HOSTNAME 및 FOLDER를 실제 값으로 변경하십시오.

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