SFTPリソースへのコマンド出力の保存

SFTPリソースへのコマンド出力の保存

私はtarballを作成して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クライアントを使用する必要があります。私はlftpFIFOパイプで動作しているので> = 4.7を選択しました(scpまたそうではsftpありません)。

これはbashLinuxで動作します。

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のファイルにリンクされます。ファイル名は、拡張結果として現在のコマンドに引数として渡されます。 >(リスト)形式を使用している場合は、ファイルに書き込むとリストへの入力が提供されます。 <(リスト)形式を使用している場合は、リストの出力を取得するには引数として渡されたファイルを読み取る必要があります。

おすすめ記事