解凍せずにファイル内でファイルを検索する必要があります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
二重引用符で囲んではいけません。
--wildcards
tar
個々のファイルではなくパターンに基づいて抽出できるように、2番目のスイッチを使用します。次に、このパラメータを保護するために二重引用符で囲みます。