Answers:
这是有关如何从存档中提取特定文件的详细说明。具体来说,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
:通过bzip2过滤归档文件,用于解压缩.bz2文件。
-z
:通过gzip过滤归档文件,用于解压缩.gz文件。
--wildcards
:指示tar将命令行参数视为通配模式。
--no-anchored
:通知它,该模式适用于任何/分隔符之后的成员名称。
-t
完全下载tarball之前避免提取列表中的(当前)最后一个文件。在任何时候,列表仅显示已经或正在传输的文件名,即。不是完整列表;直到完全下载。
我自己没有尝试过,但是如何做:
tar xvf archive.tar | head -n50
Tar为提取的每个文件向STDOUT输出一行,然后该head
命令将在50行之后终止管道。管道快死了,我希望焦油也死掉。
head
。让我更改答案。
tar
的原因,它可能在SIGPIPEd之前提取了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 ""
就这样