당신은 가지고 있습니까?세게 때리다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")