tar.gzアーカイブに含まれる特定のファイルに対してgrep操作を実行できるコマンドを探しています。
例:
ファイル:archive.tar.gz、これには以下が含まれます。
fileA.txt
fileB.txt
fileC.txt
元のアーカイブからファイルを抽出せずに、1つのコマンドで他の2つではなくfileA.txtからのみgrepしたいと思います。
可能ですか?
私は試した:
for f in /path/*.gz; do
tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true'
done
このコマンドは、アーカイブに含まれるすべてのファイルに対してgrepを実行しますが、まったく必要ではありません。検索したいファイルだけをgrepするコマンドが必要です。
答え1
tar
アーカイブでどのファイルを処理する必要があるかを教えてください。
for f in /path/*.gz; do
tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true' fileA.txt
done
(fileA.txt
コマンドの最後でtar
)。
答え2
tarが抽出する必要があるファイルを制限できます。
GNU tarを使用していると仮定した場合は、この--to-stdout
オプションを使用してください。これは、正しく引用されたコマンドを渡すよりも簡単です。
for TAR_ARCHIVE in /path/*.gz; do
TAR_FILENAME="fileA.txt"
tar -xzf "$TAR_ARCHIVE" --to-stdout "$TAR_FILENAME" | grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern
done
答え3
ウグレフオプションを使用してtar.gzファイルを検索します-z
。