권한 오류나 다중 로그인 없이 원격으로 파일을 찾고 복사하려면 어떻게 해야 합니까?

권한 오류나 다중 로그인 없이 원격으로 파일을 찾고 복사하려면 어떻게 해야 합니까?

내가 겪고 있는 문제는 우리 서버의 중첩된 디렉터리에 많은 파일이 있고 해당 파일을 찾아 내 홈 디렉터리의 폴더에 복사하려고 한다는 것입니다. 즉, 다음과 같이 모든 파일을 단순히 반복할 수는 없습니다.

scp user@server:"$find_directory/*.genes.results" $copy_directory

그래서 while 루프를 사용하여 이 문제를 해결하려고 시도했고 파일이 성공적으로 복사되었습니다! 와는 별개로이는 반복될 때마다 서버에 로그인해야 하므로 매우 비실용적입니다.

#!/bin/bash

#read in starting and ending directory
read -p "Directory that contains all files to move from server: " find_directory
read -p "Directory that will contain all files from server: " copy_directory

path_list=""
ssh user@server find "$find_directory" -name "*.genes.results" | 
while read path_name
do
    echo "$path_name"
    scp user@server:$path_name "$copy_directory"
done

그래서 나는 똑똑하고 우아하고 작은 명령 대체를 통해 이 문제를 해결할 수 있다고 생각했습니다.

scp user@server:"$( ssh gordid@cadillac find "$find_directory" -name "*.genes.results" )" $copy_directory 

모든 파일을 찾았습니다 ...와는 별개로이상한 권한 오류가 발생했기 때문에 그 중 어느 것도 복사되지 않았습니다! 이 scp의 양쪽에 필요한 모든 권한이 있기 때문에 이것은 의미가 없습니다(그리고 이전에는 while 루프에서도 작동했습니다).

권한 거부 오류 목록

그래서 지금은 아이디어가 부족해요. 루프로 돌아가서 자동 로그인을 설정할 수도 있지만 지금은 상황이 너무 복잡하다는 느낌이 듭니다. StackExchange, 당신의 생각은 무엇입니까?

편집 : 이것을 찾았습니다자원이것도 같은 문제가있는 것 같습니다. 아마도 자동 로그인이 유일한 옵션일까요?

답변1

tar로컬 디렉토리의 디렉토리 구조를 보존할 수 있다고 가정하면 원격 측에서 tarball을 생성하고 SSH 연결을 통해 스트리밍한 다음 tar로컬에서 압축 해제를 사용하여 이 문제를 해결할 수 있습니다 .

예를 들어:

$ ssh user@server "
      cd '$find_directory' &&
      find . -name '*.genes.results' |
      tar -cf - -T -
  ' | tar -C "$copy_directory" -xvf -

rsync포함/제외 목록을 사용하여 원하는 확장자를 가진 파일만 복사 할 수도 있습니다 . rsync기본적으로 SSH가 사용됩니다. 또한 원격 서버의 디렉터리 구조도 유지됩니다.

$ rsync -av --delete \
      --include '*/' \
      --include '*.genes.results' \
      --exclude '*' \
      --prune-empty-dirs \
      user@server:"$find_directory/" \
      "$copy_directory/"

rsync옵션은 확장명이 있는 디렉터리와 파일을 복사 .genes.results하고 다른 모든 항목은 제외합니다. 복사 후 비어 있는 디렉토리를 잘라냅니다. 디렉터리를 먼저 포함해야 합니다. 그렇지 않으면 rsync디렉터리가 탐색되지 않아 하위 디렉터리에서 관심 있는 파일을 찾을 수 없기 때문입니다.

관련 정보