SFTP 서버에서 파일을 가져오고 메모리에서 조작

SFTP 서버에서 파일을 가져오고 메모리에서 조작

거기에세게 때리다SFTP 서버에 액세스할 수 있는 방법은 파일에 "액세스"하고 다운로드하지 않고완충기, 콘텐츠를 조작한 다음 로컬에 저장합니다.

Perl 스크립트를 사용하여 이 작업을 수행할 수 있다는 것을 알고 있습니다.

@file=$sftp->get($file);

Bash에서 비슷한 접근 방식을 찾고 있습니다.

의도는 Perl 스크립트에서 벗어나 bash에서 기능을 구현하는 것입니다.

감사해요

답변1

와 함께SFTP를 이용한 libcurl지원하다:

 curl sftp://sftp.example.com -o - | do_some_magic > filename


나는 다음 Linux 배포판/Unix에서 컬을 테스트했습니다.

sftp 지원이 내장된 libcurl: RHEL6, RHEL7

미포함: RHEL5, Ubuntu 11.04, Ubuntu 14.04, Solaris 11

답변2

원격 파일을 다운로드하지 않으면 액세스할 수 없지만, 로컬 파일 시스템에 저장하지 않고도 원격 파일을 다운로드할 수 있습니다. SFTP에 대한 지원을 포함하지 않는 bash 자체가 아니라 명령줄 유틸리티를 사용합니다.

OpenSSH의 클라이언트 sftp는 그렇게 할 수 없는 것 같습니다. 클라이언트는 검색 가능한 출력 위치를 얻으라고 주장하며 이를 명령 대체로 파이프하는 것을 제외합니다.

Curl은 파일을 표준 출력으로 다운로드할 수 있습니다., 그러나 항상 SFTP 지원으로 구축되는 것은 아닙니다(HTTP 다운로더로 시작됨).

Perl에서 이를 수행하는 방법을 이미 알고 있으므로 Perl을 실행하면 됩니다.

또는 원격 파일 시스템을 마운트하십시오.SSHFS, 다음과 같은 명령을 사용하여 액세스합니다 cat.

mkdir foo
sshfs example.com:/path/to/directory foo
content=$(cat foo/somefile)
fusermount -u foo
rmdir foo

또는 "일반적인" 쉘 방식으로 작업을 수행합니다. 쉘은 메모리에서 화려한 데이터 조작을 수행하도록 설계되지 않았으며 대부분 다른 명령을 실행하고 파일 작업에 능숙합니다. 파일 콘텐츠 작업에는 일반적으로 파이프라인이 포함되며 때로는 임시 파일이 포함되기도 합니다.

my_tmp_dir=
trap 'rm -rf "$my_tmp_dir"' EXIT INT HUP
my_tmp_dir=$(mktemp -d)
echo 'get remotefile localfile' | { cd "$my_tmp_dir" && sftp -q; }
content=$(cat "$my_tmp_dir/localfile")

관련 정보