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に出力し、コマンドはhead
50行後にパイプを終了します。パイプが消えたらタールも消えてほしい。