僅從大型 tarball 解壓縮一定數量的文件

僅從大型 tarball 解壓縮一定數量的文件

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

相關內容