Bash
創建 tarball 時是否可以生成單獨的文件列表?
用於備份時
tar
,我想創建一個單獨的文件列表,這些文件包含在存檔中,以便與備份 tarball 一起儲存。我還希望能夠將來自 tar 的錯誤消息儲存在日誌中。
不太好的解決方案:
tar --verbose
…&> filelist.txt
但這會在一個文件中給出錯誤+文件列表。tar --list
創建 tarball 之後。但這需要很長時間。有沒有辦法在我第一次滾動球的同時獲取文件列表並將其儲存在一個單獨的文件中?
你提到你不喜歡
tar --list
,因為它很慢。我猜這是因為它是一個大的壓縮包,它必須重新掃描整個東西。如果確實如此,您可以通過在創建時進行掃描來獲得更好的性能:tar -c /input/directory | tee output.tar | tar -t > filelist.txt
這用於
tee
拆分生成的 tarball,一個轉到文件,另一個轉到tar -t
.如果要 gzip 壓縮包:
tar -c /input/directory | tee >(gzip > output.tar.gz) | tar -t filelist.txt
我們沒有第一個
tar
執行 gzip,因為當第二個 tar 必須再次解壓縮它時,它會浪費 CPU 週期。相反,我們只在將 tarball 寫入磁碟時對其進行 gzip。
您可以將每個文件附加到 tar 文件中:
for f in file ...; do echo "$f" tar rf result.tar $f done