문제

FTP 서버에서 TAR 파일을 가져 와서 로컬에서 타협하려는 Shellscript를 작성했습니다. TAR 아카이브에서 특정 파일을 추출해야합니다. Tarfile의 파일 이름에는 날짜가 포함되어 있습니다. 이 날짜에 따라 TAR 파일을 선택할 수 있어야합니다.

abc_myfile_$date.tar FTP 서버에서 가져 오는 파일의 형식입니다.

내 현재 코드는 다음과 같습니다.

for host in ftpserver
do
ftp -inv host <<END_SCRIPT
user username password
prompt
cd remotepath
lcd localpath
mget *myfile_$date*.tar
quit
END_SCRIPT
done

for next in `ls localpath/*.tar`
do
tar xvf $next *required_file_in_tar_file*.dat
done

스크립트를 실행하면 파일을 사용하지 못할 수 없습니다.

해당 파일의 정확한 이름을 언급 한 경우에만 FTP 서버에서 단일 TAR 파일을 얻을 수 있습니다. 파일을 받고 싶습니다 myfile_$date 이름으로. 이 후에는 로컬 경로로 추출하여 이름이 내 이름으로 구성된 TAR 파일에 지정된 파일을 가져오고 싶습니다. required_files.

도움이 되었습니까?

해결책

당신은 얻습니다 .tar 파일을 파일하지만 압축 해제하십시오 z 옵션. 압축 된 파일 (필요한 파일 z) 일반적으로 .tar.gz 접두사. 노력하다

tar xvf $next *required_file_in_tar_file*.dat

다른 팁

첫째, 서버에서 얻은 파일 이름에 와일드 카드를 사용하려면 get 대신 mget을 사용해야합니다. 와일드 카드 파일 확장 ( *)은 get 명령에 대해서는 작동하지 않습니다.
파일을 가져 오면 TAR 작동이 예상대로 작동하면 대부분의 최신 버전의 Linux/BSD에는 'Smart'타르가 있습니다. Tarball이 자체적으로 압축되어 자동 압축을 자동으로 압축하여 적절한 압축/감압 도구가 시스템에 제공됩니다 (.jz 파일 용 BZIP2, .gz 파일 용 GZIP).

확실하지 않지만 FTP 프로토콜에는 명령이 없습니다. mget 여러 파일을 다운로드하려면? (대신에 get)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top