解凍せずにtar.gzファイルからファイルを検索し、結果を別のフォルダにコピーします。

解凍せずにtar.gzファイルからファイルを検索し、結果を別のフォルダにコピーします。

解凍せずにファイル内でファイルを検索する必要がありますtar.gz。その後、取得したファイル(存在する場合)を別のフォルダにコピーする必要があります。

これまでこれを持っていますが、行のコピー部分でエラーが発生します。

gunzip -c file.tar.gz | tar tvf - | grep filename | -exec cp {} /folder/another_folder \;

それとも、解凍せずにファイル内でファイルを検索するより良い方法はありますかtar.gz

ベストアンサー1

あなたのバージョンがコンバージョンをtarサポートしていませんか-z

$ tar ztvf file.tar.gz | grep fliename

アーカイブにファイルがある場合、ファイル名が返されます。

ファイル抽出中

ファイルを最初に検索し、ファイルがある場合にのみ抽出するには、次のようにします。

$ arc="<tarball>"; file="<file to extract>"; \
        tar ztvf $arc | grep $file && tar zxvf $arc $file

サンプル圧縮パッケージ

$ tar ztvf ffmpeg.static.64bit.2013-10-05.tar.gz 
-rwxr-xr-x root/root  19579304 2013-10-05 00:06 ffmpeg
-rwxr-xr-x root/root  19528712 2013-10-05 00:06 ffprobe

はい

$ arc="ffmpeg.static.64bit.2013-10-05.tar.gz"; file="ffmpeg"; \
       tar ztvf $arc | grep $file && tar zxvf $arc $file

-rwxr-xr-x root/root  19579304 2013-10-05 00:06 ffmpeg
ffmpeg

確認する

$ ll ffmpeg
-rwxr-xr-x 1 manny manny 19579304 Oct  5 00:06 ffmpeg*

その他のディレクトリ

抽出したファイルを別の場所に出力するには、スイッチを使用しtarます-C

$ arc="<tarball>"; file="<file to extract>"; \
        tar ztvf $arc | grep $file && tar zxvf $arc -C /path/to/dir $file

例 #1

$ arc="ffmpeg.static.64bit.2013-10-05.tar.gz"; \
       file="ffmpeg"; tar ztvf $arc | grep $file && tar zxvf $arc -C /tmp $file

確認する

$ ll /tmp/ffmpeg
-rwxr-xr-x 1 manny manny 19579304 Oct  5 00:06 /tmp/ffmpeg*

例 #2

$ arc=cp210x.tar.gz; file="cp210x/usb-serial/Makefile"; \
       tar ztvf $arc | grep $file && tar zxvf $arc -C /tmp $file

確認する

$ ll /tmp/cp210x/usb-serial/Makefile 
-rw-rw-r-- 1 manny manny 388 May 13 01:37 /tmp/cp210x/usb-serial/Makefile

例 #3

ファイルパターンを抽出したい場合は、ワイルドカードを使用することもできます。

$ arc=cp210x.tar.gz; file='*Makefile'; \
       tar ztvf $arc | grep -E "$file" && tar zxvf $arc -C /tmp --wildcards "$file"

確認する

$ find /tmp/cp210x -ls | grep Makefile
26881948    4 -r--r--r--   1 manny    manny         171 Mar 14  2012 /tmp/cp210x/Linux_3.x.x_VCP_Driver_Source/Makefile
26881960    4 -rw-rw-r--   1 manny    manny         388 May 13 01:37 /tmp/cp210x/usb-serial/Makefile

詳細

上記には、いくつかの追加の変更が含まれています。一致するすべてのコンテンツを抽出しています'*Makefile'。これで、一重引用符と二重引用符で囲みます。これは*Makefile偶発的な拡張を防ぐためです。

grep-Eこれで、出力は単一の文字列ではなく正規表現を取得するため、スイッチが含まれますtar。また、パラメータをgrep二重引用符で囲んではいけません。

--wildcardstar個々のファイルではなくパターンに基づいて抽出できるように、2番目のスイッチを使用します。次に、このパラメータを保護するために二重引用符で囲みます。

おすすめ記事