scp를 사용하여 dir을 재귀 적으로 복사 할 때 파일을 필터링하는 방법은 무엇입니까?


99

모든 .class 파일을 서버에서 로컬로 모든 디렉토리가 예약 된 상태로 복사해야합니다. 예를 들어이 server:/usr/some/unknown/number/of/sub/folders/me.class될 것입니다 /usr/project/backup/some/unknown/number/of/sub/folders/me.class내가 원하는하지 않는 등을 .svn베이스 파일과 같은 다른 많은 쓸모없는 파일이 있습니다 문제입니다. scp.class 파일 만 필터링하려면 어떻게해야 합니까?


언급 된 rsync 옵션이 마음에 듭니다. 이것이 일회성 작업인지 또는 반복적으로 자동화 할 것인지에 대해서는 언급하지 않았습니다. 일회성 작업의 경우 find, grep -v, xargs 및 임시 파일을 적절히 사용하면이 작업이 짧아집니다.
user47559 2009-08-04

답변:


152

아마 같은 것을 사용하는 것이 좋습니다 거라고 rsync는이 때문에 위해를 include하고 exclude, 플래그 예를 -

rsync -rav -e ssh --include '*/' --include='*.class' --exclude='*' \
server:/usr/some/unknown/number/of/sub/folders/ \ 
/usr/project/backup/some/unknown/number/of/sub/folders/

기타 유용한 플래그 :

  • -r 재귀 용
  • -a 아카이브 용 (대부분 모든 파일)
  • -v 자세한 출력
  • -e 기본값 대신 ssh를 지정하려면 (실제로는 ssh 여야 함)

4
어쨌든 * class 파일이없는 하위 폴더를 무시하도록하려면? (즉, 빈 디렉토리를 원하지 않습니다.)
Grant Birchmeier

굉장하고 이것은 너무 빨리 사악합니다!
Prasad Chalasani 2014

2
당신이 MAN 페이지에서 --include, --include하지 =를 설명 할 수 저는 --include =하지만 --include에 대한 설명을 찾을 수
bazz

1
이 옵션 은 rsync 매뉴얼 페이지에 따라 -a이미 포함되어 -r있습니다.
Georg Schölly

3
@GrantBirchmeier --prune-empty-dirs는 빈 디렉토리를 제거합니다.
Elrond1337

74

기본 디렉토리에서 도트 파일을 제외하려면 :

scp -r [!.]* server:/path/to/something

[!.]* 점으로 시작하지 않는 작업 디렉토리의 모든 파일로 확장되는 쉘 glob입니다.


10
이것이 아마도 가장 좋은 대답 일 것입니다. glob을 사용하여 파일을 필터링하는 것이 좋습니다.
Yoshua Wuyts 2015

1
귀하의 옵션이 내가 가진 것처럼 scp로 제한되어 있다면 이것은 확실히 도움이되었습니다.
user28095

3
이것은 요청되는 것과 같은 파일을 제외한다는 것을 나타내지 만 전체 디렉토리에 대해 어떻게 달성 할 수 있습니까?
Pille

37

scp에는 파일을 필터링하는 기능이 없습니다. 이와 같은 "고급"항목의 경우 rsync를 사용하는 것이 좋습니다.

rsync -av --exclude '*.svn' user@server:/my/dir .

(이 줄은 먼 폴더에서 현재 폴더로 rsync를 복사합니다)

ssh 연결을 통한 최신 버전의 rsync 터널은 기본적으로 자동으로 제공됩니다.


10

당신이 할 수 있기 때문에 scp당신에게 확인을해야 ssh,
중 스크립트는 다음 또는 로그인 및 실행 ...

# After reaching the server of interest
cd /usr/some/unknown/number/of/sub/folders
tar cfj pack.tar.bz2 $(find . -type f -name *.class)

로컬 서버로 돌아 가기 (로그 아웃) 및 scp,

# from the local machine
cd /usr/project/backup/some/unknown/number/of/sub/folders
scp you@server:/usr/some/unknown/number/of/sub/folders/pack.tar.bz2 .
tar xfj pack.tar.bz2

당신이 찾을 경우 $(find ...)로 타르 변화를 너무 깁니다,

find . -type f -name *.class | xargs tar cfj pack.tar.bz2

마지막으로,에서 보관하고 /usr/project/backup/있는데
왜 추출이 귀찮습니까? tar.bz2날짜 + 타임 스탬프와 함께을 유지하십시오 .


이것은 나를 도왔다. 나는 Windows 에 있고 OS에 설치 rsync하고 ssh설치 하려고 노력하고 있습니다. 대신 이것은 현명한 해결 방법이었습니다. 감사!
rayryeng

2

파일에 대한 아래 명령.

scp`find. -maxdepth 1-이름 "* .log"\! -name "hs_err_pid2801.log"-type f` root @ IP : / tmp / test /

  1. IP는 대상 서버 IP 주소가됩니다.
  2. 포함 파일의 경우 -name "* .log".
  3. \! 제외 파일의 경우 -name "hs_err_pid2801.log"
  4. . 현재 작업 디렉토리입니다.
  5. -파일 유형의 경우 f를 입력합니다.

디렉토리 명령 아래.

scp -r`find. -maxdepth 1-이름 "lo *"\! -name "localhost"-type d` root @ IP : / tmp / test /

요구 사항에 따라 위의 명령을 사용자 지정할 수 있습니다.


1

ssh 키 기반 인증을 사용하면 다음 스크립트가 작동합니다.

for x in `ssh user@remotehost 'find /usr/some -type f -name *.class'`; do y=$(echo $x|sed 's/.[^/]*$//'|sed "s/^\/usr//"); mkdir -p /usr/project/backup$y; scp $(echo 'user@remotehost:'$x) /usr/project/backup$y/; done

1

실제로 scp를 사용하려면 간접적 인 방법이 있습니다. 로컬 폴더 '/ src'아래에있는 모든 .jpg 파일을 원격 서버 10.1.1.2의 '/ dst'폴더에 복사하고 싶다고 가정 해 보겠습니다.

#make a clean temp folder
mkdir /tmp/ttt
#copy all .jpg file and retain folder structure as-is
find /src -type f -name *.jpg -exec cp --parents \{\} /tmp/ttt \;
#copy to remote target folder as-is and retain original time attributes
scp -rp /tmp/ttt/* 10.1.1.2:/dst
#if copy ok, remove temp folder
rm -rf /tmp/ttt

0
scp -i /home/<user>/.ssh/id_rsa -o "StrictHostKeyChecking=no" -rp /source/directory/path/[!.]* <target_user>@<target_system:/destination/directory/path

1
구두 설명도 코드와 함께 도움이됩니다
con

-1
  1. 소스 폴더를 somedir다음 위치에 복사하십시오 .

    cp -r srcdir somedir

  2. 불필요한 파일을 모두 제거하십시오.

    find somedir -name '.svn'-exec rm -rf {} \ +

  3. scp 시작 somedir


이 답변에 대한 모든 반대표는 왜? 이것은 질문에 대한 비아 솔루션처럼 들립니다.
bcarroll 2014 년

7
이것은 불필요한 파일을 복사 한 다음 삭제하여 잠재적으로 많은 시간을 낭비하기 때문입니다.
Oded

여러 컴파일 단계를 거치는 프로그램의 경우 실제로 이것은 많은 의미가 있습니다. 컴파일 된 코드를 tar또는 zip-파일 로 압축하는 단계 바로 전에 갈 수 있습니다. 대신 압축이 없으며 (scp가 압축을 수행함) '패키징 된'코드가 복사됩니다.
samvv

사실 그 @samvv (모든 설정, 환경에 따라 다름)
산 제이 팔콘

공간 제약으로 인해 파일이 무시되면 공간과 시간이 낭비됩니다
jake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.