
生成されたファイルをあるコマンドから別のコマンドに送信する方法を探しているので、その間にディスクにコピーを保存する必要はありません。たとえば、rar
ディスクにedファイルがあり、それを開く場合は、次のコマンドを実行できるようにしたいと思います。
unrar x file.rar | kplayer
unrar x file.rar | gpg -c
gpg file.gpg | kplayer
私はあなたが私が探しているものを理解していると確信しています。unrar
stdoutに送信しようとしていますが、kplayerに接続する-p
必要があるようですが、画面にのみ送信してください。|
私の考えでは、kplayerが標準入力からデータを取得できないためです。
しかし、ファイルをディスクに保存せずに別の場所に転送する方法はありますか?これがメモリにファイルシステムを作成して使用できる最良の方法ですが、そんなに多くのメモリを維持するという考えは気に入らません。
答え1
多くのコマンドには書き込みオプションがありますSTDOUT
。たとえば、Unrarにはこのp
オプションがあります。多くのコマンドには、-
組み合わせて読み取るオプションがありますSTDIN
。したがって、提供した最初の例は、次のように書き直すことができます。
unrar px file.rar | kplayer -
デフォルトでは、GPGはすでにパイプ入力として機能します。
unrar px file.rar | gpg -c
コマンドのヘルプおよび/またはマニュアル/情報ページが結果の送信をサポートしていることを確認してくださいSTDOUT
(多くのコマンドがデフォルトでこれを実行します)。
答え2
コマンドにファイル名のみが必要な場合、または/dev/stdin
を指定してください/dev/fd/0
。これは特殊ファイルです。これを開くと、実際に標準入力がコピーされます。一部のコマンドでは、-
標準入力のエイリアスも使用できます。
unrar p foo.rar somefile | somecommand -
unrar p foo.rar somefile | somecommand /dev/stdin
時には、プログラムはファイル名に制限があり、しばしば特定の拡張子が必要です。シンボリックリンクとしてだまされてもよい。
ln -s /dev/stdin myfile.ext
unrar p foo.rar somefile | somecommand myfile.ext
一部のプログラムはパイプ入力を処理できないため、これが常に機能するわけではありません。検索可能なファイル、つまり自由に前後に移動できるファイルが必要です。この場合、一時ファイルを生成する必要があります。
場合によっては、コマンド出力ではなく通常のファイルとして表示されるようにデータを並べ替えることができます。ヒューズ特に、さまざまなコンテンツを一般的なファイルとして表示することが可能です。例えば、AVFS、アーカイブメンバーはファイルとして表示されます。
mountavfs
cd "~/.avfs$PWD/foo.rar\#"
somecommand somefile
答え3
答え4
みんなのコメントありがとうございます。私が望むものを簡単に得る方法はないようです。 ;(
次のコマンドは/ dev / shmを実行して使用する必要があるため、素晴らしいスクリプトを書く必要があります :)
cp file.gpg /dev/shm && gpg -c file.gpg && rm file.gpg && kplayer file && rm file