当运行像tar这样的命令来解压缩tar文件时,包含的文件会显示在stdout上,我该如何解析它并在不同的变量中捕获它们
tar -xvf testfile.tar
dir/file1.txt
dir/file2.txt
我想在var file1中存储file1.txt名称,在var file2中存储file2.txt。
答案 0 :(得分:0)
这是一种方法
count=1
for i in $(tar -tzf testfile.tar); do eval "file${count}=$i"; count=$((count+1)); done
它会给你这样的东西:
file1=dir/
file2=dir/file2.txt
file3=dir/file1.txt
在我的例子中,我创建了一个dir文件夹,在技术上并不是你的第一行dir /
答案 1 :(得分:0)
如果您的问题被标记为shell
unix
sh
,那么您的问题会请求符合 POSIX shell 的答案,但您在评论中的回答表明您是在 bash (或其他支持数组的shell)中工作。根据您的shell,标记会对您将收到的答案以及将(或不会)为您起作用的答案产生影响。 (正如@Inian正确指出的那样)
如果您正在使用支持数组的shell(bash,ksh,zsh等),捕获tar -xvf testfile.txt
命令输出的最简单方法是使用命令替换填充数组,例如
array=( $(tar -tvf testfile.tar) )
如果您需要POSIX shell解决方案(Bourne shell,dash等),那么您需要管道从tar
到read
的输出或重定向它输出到一个临时文件,read
从那里输出。您可以使用类似于以下内容的内容,
tar -tvf testfile.tar | while IFS="\n" read -r fname
do
printf "found: %s\n" "$fname"
done
或者,如果您想使用临时文件,请执行以下操作:
tar -tvf testfile.tar > tempfile.txt
while IFS="\n" read -r fname
do
printf "found: %s\n" "$fname"
done <"tempfile.txt"
rm tempfile.txt
注意:取决于您的操作系统和read
的实施情况,您可能有{可能} {%}}可能没有-r
选项。如果您的实现没有提供,请简单省略。