Tar
tar - 提取文件列表
如何從*.tar.gz*存檔中提取文件,同時保持對提取文件的跟踪?
例如,假設我有以下文件結構……
ROOT ╠═▶ children ║ ╠═▶ joe.txt ║ ╚═▶ george.txt ╠═▶ bar.txt ╠═▶ foo.txt ╚═▶ A̲R̲C̲H̲I̲V̲E̲.t̲a̲r̲.b̲z̲ ├─▷ children │ ├─▷ joe.txt │ └─▷ bob.txt ├─▷ hello.txt ├─▷ world.txt └─▷ foo.txt
現在,如果我從存檔中提取文件,同時保留較新的文件,我想知道哪些文件已被提取,因此我可以執行以下操作:
tar xf ./ARCHIVE.tar.gz --keep-newer-files | xargs -I EXTRACTED_FILE echo EXTRACTED_FILE
我將使用該選項
--to-command
觸發所有提取文件的列印參數是一個命令,它將使用環境變數 TAR_FILENAME 來獲得文件名,並將接收你的文件
STDIN
所以你必須閱讀
STDIN
並創建提取的文件,你可以在STDOUT
你創建的文件上列印tar -xzf ../ARCH.tgz --keep-newer-files \ --to-command="sh -c $(printf '%q' \ 'mkdir -p "$(dirname "$TAR_FILENAME")";dd of="$TAR_FILENAME" >/dev/null 2>&1;echo "#EXTRACTED#$TAR_FILENAME" ')" > output_tar.txt
每個提取的
output_tar.txt
文件都有一行。見https://www.gnu.org/software/tar/manual/html_node/Writing-to-an-External-Program.html