大きなタールボールから特定の数のファイルのみを抽出する

大きなタールボールから特定の数のファイルのみを抽出する

FTP経由でリモートシステムからローカルシステムに転送する大きなターボールがあります。

転送中にファイル処理を開始できるように、一度に50のファイルを解凍できるかどうかを知りたいです。

答え1

ここアーカイブから特定のファイルを抽出する方法の詳細な説明。具体的には、GNU tarはtarballから単一または複数のファイルを抽出するために使用できます。特定のアーカイブメンバーを抽出するには、正しいメンバー名をパラメーターとして指定してください。

たとえば、

tar --extract --file={tarball.tar} {file}

特定のワイルドカードパターン(ワイルドカード)に一致するファイルを抽出することもできます。たとえば、ディレクトリのプレフィックスに関係なく、cbz.tarからpicで始まるすべてのファイルを抽出するには、次のように入力します。

tar -xf cbz.tar --wildcards --no-anchored 'pic*'

すべてのPHPファイルを抽出するには、次のように入力します。

tar -xf cbz.tar --wildcards --no-anchored '*.php'

どこ、

-x:tar にファイルを解凍するよう指示します。
-f:ファイル名/圧縮パッケージ名を指定します。
-v:詳細(ファイル抽出中の進行状況を表示)
-j:.bz2ファイルを解凍するために使用されるbzip2を介して圧縮パッケージをフィルタリングします。
-z:.gzファイルを解凍するために使用されるgzipを介して圧縮パッケージをフィルタリングします。
--wildcards:コマンドライン引数をワイルドカードパターンとして処理するようにtarに指示します。
--no-anchored:/ 区切り文字の後のすべてのメンバー名にパターンが適用されることを通知します。

答え2

tar -tvf tarfile.tar

完全なファイルのリストを提供しますtarfile.tar

tar -xvf tarfile.tar fileToRestore  

このコマンドは復元fileToRestore

すべてのファイルではなく複数のファイルを解凍するには、次のようにします。

  • すべてのファイルtarfile.tarのリストtar.txt

    tar -tvf tarfile.tar > tar.txt
    
  • これでtar.txt完全なファイルのリストがあるので、tarfile.tar 回復したいファイルまたはヘッダーファイルのみを保持できます。

    head -n50 tar.txt > tar2.txt
    

この行をファイルに入れることができます

cat tar.txt|while read line
do
   tar -xvf tarfile.tar ${line}
done

または完全なスクリプトファイル:

#!/bin/bash

if [[ "$1" = "" || "$2" = "" ]]
   then
   echo ""
   echo "Uso: untar-list.sh tarfile.tar listfile.txt"
   echo ""
   exit 1
fi

tarfile=$1
file=$2

if [[ ! -f ${tarfile} ]]
   then
   echo ""
   echo "Archivo ${tarfile} no existe"
   echo ""
   exit 1
fi

if [[ ! -f ${file} ]]
   then
   echo ""
   echo "Archivo ${file} no existe"
   echo ""
   exit 1
fi

cat ${file}|while read line
do
  tar -xvf ${tarfile} ${line}
done

echo ""
echo "Finalizado"
echo ""

それだけです。

答え3

自分で試したことはありませんが、次のようになります。

tar xvf archive.tar | head -n50

Tarは抽出されたファイルごとに1行をSTDOUTに出力し、コマンドはhead50行後にパイプを終了します。パイプが消えたらタールも消えてほしい。

関連情報