リモート システムからローカル システムに FTP 転送されている大きな tarball があります。
たとえば、一度に 50 個のファイルの解凍を開始して、転送中にそれらのファイルの処理を開始できるかどうかを知りたいです。
答え1
ここアーカイブから特定のファイルを抽出する方法について詳しく説明します。特に、GNU tar は tarball から 1 つ以上のファイルを抽出するために使用できます。特定のアーカイブ メンバーを抽出するには、正確なメンバー名を引数として指定します。
例えば:
tar --extract --file={tarball.tar} {file}
特定のグロビング パターン (ワイルドカード) に一致するファイルを抽出することもできます。たとえば、ディレクトリ プレフィックスに関係なく、pic で始まるすべてのファイルを cbz.tar から抽出するには、次のように入力します。
tar -xf cbz.tar --wildcards --no-anchored 'pic*'
すべての PHP ファイルを抽出するには、次のように入力します。
tar -xf cbz.tar --wildcards --no-anchored '*.php'
どこ、
-x
: tar にファイルを抽出するよう指示します。
-f
: ファイル名 / tarball 名を指定します。
-v
: 詳細 (ファイル抽出中に進行状況を表示します)。
-j
: bzip2 でアーカイブをフィルターし、.bz2 ファイルを解凍するために使用します。
-z
: gzip でアーカイブをフィルターし、.gz ファイルを解凍するために使用します。
--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 に出力し、head
コマンドは 50 行後にパイプを終了します。パイプが終了すると、tar も終了すると予想されます。