이것이 내가 한 일입니다:
파일 목록이 포함된 abc.txt라는 파일이 있습니다. 저는 abc.txt를 사용하여 이 파일들을 폴더로 이동하고, 폴더를 tar 처리한 다음, 마지막으로 GNU/Linux를 실행하는 서버에서 내 로컬 PC로 tar를 다운로드했습니다.
목록 형식의 단계는 다음과 같습니다.
- abc.txt
- abc.txt(나열된 파일) -> 폴더
- 폴더->Folder.tar
- 폴더.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
예외와 일치하지 않는 모든 줄을 제공합니다