
방금 타르 볼을 만들고 SFTP 리소스에만 저장하고 싶었습니다. 나는 데이터 손상에 대한 편집증이 있기 때문에 일반적으로 신뢰할 수 있는 것이라면 내 타르 볼의 sha256sum을 함께 저장하고 아카이브를 생성할 때와 작성된 후에 이를 읽어서 계산합니다. 저장되어 있는 저장 매체입니다.
나는 이것이 매우 간단하다고 생각하여 다음 명령을 입력했습니다.
tar --exclude='./somefolder' -zc . | tee "sftp://mydomain.ending/storage/location/on/server/sth.tar" | sha256sum
또한 Nautilus가 원격 터미널에 사용하는 것을 시도했습니다.
tar --exclude='./somefolder' -zc . | tee ":/run/user/1000/gvfs/sftp:host=mydomain.ending/storage/location/on/server/sth.tar" | sha256sum
그러나 출력은 다음과 같습니다.
tee: 'sftp://mydomain.ending/storage/location/on/server/sth.tar': No such file or directory
그리고
tee: ':/run/user/1000/gvfs/sftp:host=mydomain.ending/storage/location/on/server/sth.tar': No such file or directory
각기.
먼저 로컬에 저장하지 않고 타르 볼을 어떻게 저장합니까? 쉽게 사용할 수 있도록 먼저 일부 폴더에 원격 리소스를 마운트하지 않는 것이 좋습니다.
저는 Ubuntu 16.04(Linux 4.4.0 포함)를 사용합니다.
답변1
멋진 gvfs 또는 sshfs 마운트가 없으면 sftp 클라이언트를 사용해야 합니다. 나는 lftp
FIFO 파이프와 작동하기 때문에 >=4.7을 scp
선택 합니다 sftp
.
이는 bash
Linux에서 작동합니다.
tar --exclude='./somefolder' -zc . \
| tee >(lftp -c 'connect sftp://user:pass@server/path/ ;put /dev/stdin -o sth.tar.gz;') \
| sha256sum
또는 클라이언트 사용 ssh
(대화형 비밀번호 인증에 필요한 외부 괄호):
(tar --exclude='./somefolder' -zc . \
| tee >(ssh user@server "cat > /path/sth.tar.gz") \
| sha256sum)
인수도 약간 이상해 보이지만 추가 명령을 피하기 위한 tee's
이식 불가능한 마술입니다 . 설명은 다음과 같습니다 .bash
mkfifo
man bash
프로세스 대체
프로세스 대체는 명명된 파이프(FIFO) 또는 열린 파일 이름을 지정하는 /dev/fd 방법을 지원하는 시스템에서 지원됩니다. <(목록) 또는 >(목록) 형식을 취합니다. 프로세스 목록은 FIFO 또는 /dev/fd의 일부 파일에 연결된 입력 또는 출력으로 실행됩니다. 이 파일의 이름은 확장 결과로 현재 명령에 인수로 전달됩니다. >(list) 형식을 사용하는 경우 파일에 쓰면 목록에 대한 입력이 제공됩니다. <(list) 형식을 사용하는 경우 인수로 전달된 파일을 읽어야 목록의 출력을 얻을 수 있습니다.
답변2
노틸러스는 gvfs
귀하의 질문에 SFTP 서버와 같은 원격 저장 위치를 마운트하는 데 사용합니다. 이를 통해 원격 서버를 로컬 파일 시스템의 일부인 것처럼 처리할 수 있습니다. 일반적으로 마운트되는 경로는 다음과 같습니다.
/run/user/<your uid>/gvfs/<server specification>/<path>
나는 접두사가 항상 다음과 같다고 확신합니다.
/run/user/<your uid>
ls
따라서 해당 디렉토리를 통해 또는 -ing을 통해 이 마운트 지점을 찾을 수 있습니다 Tab.
이 마운트 지점을 찾으면 tee
평소와 같이 사용할 수 있습니다(명확성을 위해 줄 바꿈을 추가함).
tar --exclude='./somefolder' -zc . \
| tee "/run/user/1000/gvfs/sftp:host=mydomain.ending/storage/location/on/server/sth.tar" \
| sha256sum
또는 SFTP 대신 SSH를 사용하여 GVFS 마운트를 방지하고 이식 불가능한 프로세스 대체를 방지할 수 있습니다.
tar --exclude='./somefolder' -zc . \
| ssh mydomain.ending 'tee "/storage/location/on/server/sth.tar"' 2>/dev/null \
| sha256sum
불행하게도 sftp
이 프로그램은 단일 명령줄을 통해 원격 호스트에 파일을 푸시하는 것을 허용하지 않으며 파일을 검색하는 것만 허용합니다.
@rudimeier가 지적했듯이 위의 ssh
방법은 업로드됩니다.및 다운로드파일을 로컬에 저장하지 않도록 합니다. 다시 다운로드하지 않으려면 sha256sum
원격으로 다운로드하는 것이 더 나을 수 있습니다.
tar --exclude='./somefolder' -zc . \
| ssh mydomain.ending 'tee "/storage/location/on/server/sth.tar" | sha256sum' 2>/dev/null