SFTP 서버에서 파일을 가져와 메모리에서 작동

SFTP 서버에서 파일을 가져와 메모리에서 작동

당신은 가지고 있습니까?세게 때리다SFTP 서버에 액세스하고 파일을 "액세스"하여 다운로드하지 않고 읽는 방법완충기, 콘텐츠를 조작한 다음 로컬에 저장합니다.

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

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

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

목표는 Perl 스크립트를 제거하고 bash에서 기능을 구현하는 것입니다.

감사해요

답변1

그리고libcurl과 sftp지원하다:

 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을 직접 실행할 수 있습니다.

또는 원격 파일 시스템을 다음 위치에 마운트합니다.SSHFScat, 다음과 같은 명령을 사용하여 액세스합니다 .

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")

관련 정보