如何在跟踪已提取文件的同时从.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
触发所有提取文件的打印
该参数是一个命令,它将使用env变量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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句