我有一個很大的 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 行後終止管道。當管道消失時,我希望焦油也會消失。