
私の理解では、 を使用したいと思いますcomm -23 file1 file2
。file1 は の結果でありfind
、file2 は ですcut -c43- list
。これを 1 行で記述し、ファイル (list という名前のファイルを除く) を使用しないことは可能ですか?
答え1
ここではプロセス置換が役に立ちます:
$ comm -23 <(find /dir -name 'something') <(cut -c43- list)
このフォーマットは、<(command)
一時ファイル記述子を に適用し、 そのcommand
全体が(または他のコマンド)<( )
へのファイル入力として使用されます。comm
プロセス置換の詳細については、こちらをご覧ください. こちらもご確認くださいman bash
:
プロセス置換
プロセス置換を使用すると、ファイル名を使用してプロセスの入力または出力を参照できます。これは、<(リスト) または >(リスト) の形式を取ります。プロセス リストは非同期で実行され、その入力または出力はファイル名として表示されます。このファイル名は、展開の結果として、現在のコマンドに引数として渡されます。>(リスト) 形式を使用する場合、ファイルに書き込むと、リストの入力が提供されます。<(リスト) 形式を使用する場合、引数として渡されたファイルを読み取って、リストの出力を取得する必要があります。プロセス置換は、名前付きパイプ (FIFO) または開いているファイルの命名に /dev/fd 方式をサポートするシステムでサポートされます。