2017-06-23 9 views
0

tar.gzの1つのディレクトリから少数のファイルを抽出したいと思います。問題は、場所で私は多くのファイルを見つけるとフォルダ全体をアンパックするプロセスは非効率的であるということです。個別に抽出しようとしましたが、特定のファイルを抽出する前に、パッケージ全体をスキャンします。スキャンをスキップして直接抽出する方法はありますか?スキャンが何であるかをunserdstandするtar.gz全体をスキャンすることなく少数のファイルを抽出する

tar -zxvf <tar_name> <file_to_untar> 
+0

https://unix.stackexchange.com/questions/61461/how-to-extract-specific-files-from-tar-gz – 123

+0

tar.gz(tarではない)を抽出するには、 '-z'オプションを追加します。 – Cyrus

答えて

0

:単一ファイル一つ一つを抽出するための

スクリプトスクリプトの別の部分)。 forループは回避され、tarは一度呼び出されます。

tar -xvf compressed.tar.gz "${filesList[@]/#/$filesPath}" 

または最初

filesList=("file1" "file2" "file3" ) 
filesPath="path/to/files/inside/targz/" 
filesPathList=() 
for i in "${filesList[@]}" 
do 
    filesPathList+=("$filesPath$i") 
done 
tar -xvf compressed.tar.gz "${filesPathList[@]}" 

リストを処理私はちょうどそれはとてもループ内(gzip -cdまたはzcat)膨張させ、tar.gz形式です見てきました。パフォーマンスが悪いと説明して、もう一つの選択肢は、最初にガンチップすることです。

+0

「gzipでアーカイブをフィルタリングする」オプションを正確に変更すると、-zという意味ですか? –

+0

@Jyoti:tar(tar.gzではなく)を抽出して '-z'を削除します。 – Cyrus

0

わからない(多分にある:あなたが使用することができタールから特定のファイルを抽出するには

filesList=("file1" "file2" "file3" ) 
filesPath="path/to/files/inside/targz/" 
for i in "${filesList[@]}" 
do 
    tar -xvf compressed.tar.gz $filesPath$i 
done 
+0

スキャンとは、単一のフォルダをアンパックするプロセスが、パッケージ全体を抽出するプロセスと同じことを続けているということです。違いがあれば、全体の場合には(選択されていない)すべてのパスが出力されます。 アレイ上のtarは本当に良いアイデアです。私はこのように "タール"を使うことができるかどうか分からなかった。とにかくそれはまだ道を「探す」でしょう。 プロセスを抽出することを私が誤解している可能性があります:D –

+0

tar.gz(tarではない)を抽出するには、 '-z'オプションを追加してください。 – Cyrus

+0

@Cyrus実際には、 'z'なしで動作できるtarのバージョンに依存しています。テストしただけで動作します(gnu tar 1.29)。私は '' xvf'や 'tf'はオプションではなく引数であり、' -'をつけずに書いていますが、私はそれを質問の中で好きにします。 –

関連する問題