我有一个很大的 tarball,正忙于通过 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
:通过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 为每个提取的文件向 STDOUT 输出一行,然后该head
命令将在 50 行后终止管道。当管道消失时,我希望焦油也会消失。