リモートシステムからローカルシステムへのFTP転送に忙しい大きなtarballがあります。
転送の実行中にそれらのファイルの処理を開始できるように、一度に50個のファイルを展開できるかどうかを知りたいと思います。
リモートシステムからローカルシステムへのFTP転送に忙しい大きなtarballがあります。
転送の実行中にそれらのファイルの処理を開始できるように、一度に50個のファイルを展開できるかどうかを知りたいと思います。
回答:
ここでは、アーカイブから特定のファイルを抽出することができる方法についての詳細な説明はあります。具体的には、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
:パターンが任意の/区切り文字の後のメンバー名に適用されることを通知します。
-t
。どの時点でも、リストには、転送されたファイル名、または転送中のファイル名のみが表示されます。完全なリストではありません。完全にダウンロードされるまで。
これを自分で試してはいませんでしたが、これはどうですか:
tar xvf archive.tar | head -n50
Tarは、抽出された各ファイルに対してSTDOUTに1行を出力し、head
コマンドは50行後にパイプを強制終了します。パイプが死ぬと、タールも死ぬと思います。
head
です。答えを変えさせてください。
tar
SIGPIPEされる前に50を超えるファイルを抽出する可能性があり、特に最後の不完全なファイルを抽出する可能性があります。
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 ""
そしてそれがすべてです