파일 이름 목록을 기반으로 SSH를 통해 파일 다운로드

파일 이름 목록을 기반으로 SSH를 통해 파일 다운로드

이것이 내가 한 일입니다:

파일 목록이 포함된 abc.txt라는 파일이 있습니다. 저는 abc.txt를 사용하여 이 파일들을 폴더로 이동하고, 폴더를 tar 처리한 다음, 마지막으로 GNU/Linux를 실행하는 서버에서 내 로컬 PC로 tar를 다운로드했습니다.

목록 형식의 단계는 다음과 같습니다.

  1. abc.txt
  2. abc.txt(나열된 파일) -> 폴더
  3. 폴더->Folder.tar
  4. 폴더.tar -> 로컬 PC.

abc.txt에 2개의 파일이 포함된 경우 예를 들면 다음과 같습니다.

example1.css
example2.css

abc.txt에서 로컬 PC로 이 파일을 개별적으로 다운로드해야 합니다.

ftp나 sftp를 다운로드하려면 파일 이름이 필요하므로 abc.txt에서 파일 이름을 어떻게 읽나요?

답변1

파일에 abc.txt다음과 관련된 파일 이름 목록이 포함되어 있는 경우 /path/to/base:

ssh user@server tar c -T /path/to/abc.txt -C /path/to/base | (cd /tmp; tar xv)

이는 실제로 어디에도 저장하지 않고 동적으로 타르볼을 생성하고 이를 로컬 셸로 파이프하고 추출하여 나열된 파일을 효과적으로 복사합니다.

추가 팁

파일에 abc.txt절대 경로 목록이 포함된 경우:

ssh user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)

파일이 abc.txt원격 시스템이 아닌 로컬 시스템에 있는 경우:

ssh user@server tar c -T- < /path/to/abc.txt | (cd /tmp; tar xv)

압축을 사용하려면 gzip(기본 수준 6 사용):

ssh -C user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)

gzip압축 수준 9를 사용하려면 :

ssh user@server 'tar c -T /path/to/abc.txt | gzip -9' | (cd /tmp; tar zxv)

답변2

다음은 이름에 공백이 있는 파일에 대해 작동하는 간단한 스크립트입니다.

SAVEIFS=$IFS; IFS=$(echo -en "\n\b") ; for elt in `cat abc.txt` ; do scp $elt <YOUR_SFTP_CONNECTION> ; done ; IFS=$SAVEIFS

답변3

귀하의 질문의 핵심은 목록에서 다음 두 논리적 경로에 대한 올바른 파일을 추출하는 방법이라고 생각합니다.

egrep 'example1.css|example2.css' abc.txt

예외와 일치하는 모든 행을 제공하고

egrep -v 'example1.css|example2.css' abc.txt

예외와 일치하지 않는 모든 줄을 제공합니다

관련 정보