Tar

tar - 提取文件列表

  • May 1, 2021

如何從*.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

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