循环遍历 tar 文件并对每个文件运行命令

循环遍历 tar 文件并对每个文件运行命令

我有一个将新代码提取到服务器的过程,其中代码打包在 tar 文件中。tar 中引用的每个文件都备份到特定目录中。我想通过读取 tar 并相应地处理每个文件来自动执行此过程。如何在 shell 脚本中执行此操作?

谢谢!

答案1

使用 GNU tar 你可以使用--to-command 选项

它将对 tar 存档中的每个文件运行您的命令,并将文件的内容传送到其标准输入。

例如,这将打印存档中所有文件的 sha1 哈希值

tar -x -z -f archive.tar.gz --to-command 'echo $(sha1sum | cut -d  " " -f 1) $TAR_FILENAME'

答案2

使用 GNU Parallel:

tar xvf foo.tar | perl -ne 'print $last;$last=$_;END{print $last}' | parallel process file

出于安全原因,建议您使用包管理器进行安装。但如果无法做到这一点,那么您可以使用这个 10 秒安装。

10 秒安装将尝试进行完整安装;如果失败,则进行个人安装;如果失败,则进行最小安装。

$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
   fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
12345678 883c667e 01eed62f 975ad28b 6d50e22a
$ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
cc21b4c9 43fd03e9 3ae1ae49 e28573c0
$ sha512sum install.sh | grep da012ec113b49a54e705f86d51e784ebced224fdf
79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
$ bash install.sh

了解更多:

观看简介视频以获得快速介绍: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

浏览教程 (man parallel_tutorial)。命令行会让您爱上它。

相关内容