모든 .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
는이 때문에 위해를 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 여야 함)
답변
기본 디렉토리에서 도트 파일을 제외하려면 :
scp -r [!.]* server:/path/to/something
[!.]*
점으로 시작하지 않는 작업 디렉토리의 모든 파일로 확장되는 쉘 glob입니다.
답변
scp에는 파일을 필터링하는 기능이 없습니다. 이와 같은 “고급”항목의 경우 rsync를 사용하는 것이 좋습니다.
rsync -av --exclude '*.svn' user@server:/my/dir .
(이 줄은 먼 폴더에서 현재 폴더로 rsync를 복사합니다)
ssh 연결을 통한 최신 버전의 rsync 터널은 기본적으로 자동으로 제공됩니다.
답변
당신이 할 수 있기 때문에 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
날짜 + 타임 스탬프와 함께을 유지하십시오 .
답변
파일에 대한 아래 명령.
scp`find. -maxdepth 1-이름 “* .log”\! -name “hs_err_pid2801.log”-type f` root @ IP : / tmp / test /
- IP는 대상 서버 IP 주소가됩니다.
- 포함 파일의 경우 -name “* .log”.
- \! 제외 파일의 경우 -name “hs_err_pid2801.log”
- . 현재 작업 디렉토리입니다.
- -파일 유형의 경우 f를 입력합니다.
디렉토리 명령 아래.
scp -r`find. -maxdepth 1-이름 “lo *”\! -name “localhost”-type d` root @ IP : / tmp / test /
요구 사항에 따라 위의 명령을 사용자 지정할 수 있습니다.
답변
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
답변
실제로 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
