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

答え2

gvfsNautilusは、対応するSFTPサーバーなどのリモート保存場所をマウントするために使用されます。これにより、リモートサーバーをローカルファイルシステムの一部として処理できます。通常、マウントされるパスは次のとおりです。

/run/user/<your uid>/gvfs/<server specification>/<path>

接頭辞は常に次のとおりです。

/run/user/<your uid>

したがって、そのディレクトリまたは-ingを介してlsマウントポイントを見つけることができます。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

関連情報