Directory

確定 tar 文件中的目錄數而不提取它

  • April 3, 2019

我需要在不提取存檔的情況下計算存檔文件(例如 tar.bz)中的目錄。請注意,存檔太大,因此很難提取然後使用ls | wc -l.

這應該列出存檔中的所有文件,然後找到以/(folders) 結尾的行,然後計算它的行數:

tar -tvf file.tar | grep -c '/$'

編輯:如果您只想計算頂級目錄:

tar --exclude='./*/*' -tvf file.tar | grep -c '/$'

如果你想遞歸更深一層:

tar --exclude='./*/*/*' -tvf file.tar | grep -c '/$'

等等…

在所有情況下都能正常工作的唯一方法是使用star -find

star -t -v -f file.tar -find -type d | wc -l

適用於所有情況,即使目錄名稱不以斜杠結尾。在 1980 年左右引入了在目錄名稱後附加斜線的骯髒技巧,當時 tar 格式還不知道文件類型“目錄”。POSIX 不需要它,並且存在不將斜杠附加到目錄名稱的 tar 實現。

請注意,您可能需要 grep for'^ 0 d'以確保僅計算實際列表行的開頭,以防路徑名包含換行符,或使用:

star -t -f file.tar -find -type d -print0 -false

然後計算輸出中的 nul 字元數,例如通過將輸出管道傳輸到:

LC_ALL=C tr -cd '\0' | wc -c

引用自:https://unix.stackexchange.com/questions/508711