Directory
確定 tar 文件中的目錄數而不提取它
我需要在不提取存檔的情況下計算存檔文件(例如 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