String 提取.tar文件并创建文件列表

String 提取.tar文件并创建文件列表,string,shell,unix,substring,filelist,String,Shell,Unix,Substring,Filelist,我这里有一个小代码 for file in *.tar.gz; do tar xzvf "${file}" && rm "${file}"; done 它提取tar.gz并删除它。现在我必须创建一个名为.fl的文件列表文件,就像.tar中的子字符串一样。例如,我必须删除.tar.gz名称的前5个字母和后5个扩展名。对于我提取的每一个.tar.gz 例如: 我有一个ABC_a.tar.gz,里面有一个ABC_a.xml。 我得考a.fl 在这个A.f

我这里有一个小代码

     for file in *.tar.gz;
     do tar xzvf "${file}" && rm "${file}";
     done
它提取tar.gz并删除它。现在我必须创建一个名为.fl的文件列表文件,就像.tar中的子字符串一样。例如,我必须删除.tar.gz名称的前5个字母和后5个扩展名。对于我提取的每一个.tar.gz

例如:

我有一个ABC_a.tar.gz,里面有一个ABC_a.xml。 我得考a.fl 在这个A.fl中,我必须编写ABC_A.xml 提前感谢。

使用

for file in *.tar.gz
do
    # this creates the file list into a .fl file:
    tar tfz "${file}" > "${file:5:-5}.fl"
    # this extracts and afterwards removes the tar archive:
    tar xzvf "${file}" && rm "${file}"
done
您还可以在一个步骤中结合这两个步骤:

for file in *.tar.gz
do
    tar xzvf "${file}" > "${file:5:-5}.fl" && rm "${file}"
done

在循环中,可以对每个文件执行以下操作:

# delete first five characters
name=${file:5}

# delete .tar.gz suffix
name=${file%%.tar.gz}

谢谢你的尝试,但我已经尝试过了,但它不起作用。也许我实施错了?对于*.tar.gz中的文件;do tar xzvf${file}&&rm${file}>${file:5:-5}.fl这不是我写的:-我通过问题的for循环扩展了我的解决方案。您在评论中所写的内容只是将rm的输出重定向到每个tar的新文件中,以便创建空文件。注意,我使用t而不是x作为tar命令来列出内容,而不是提取tar。嗨,脚本没有捕获代码名=${file:5}的第一部分。此外,我必须为每个.tar.gz动态生成一个.fl文件。如果要删除前4个字母,请使用${file:4}。然后,在您的循环中,运行tar tfz$file>${name}.fl以输出tar.gz中存在的文件列表。我设法解决了这个问题,谢谢大家的回答。对于*.tar.gz中的文件;dotarxzvf${file}&&rm${file};tmp=${file:39}&&b=${tmp%.tar.gz*}&&echo${file%.tar.gz*}.xml>${b}.fl;done@tljubas,除答案外,您应接受复选标记,并/或在计数器上方向上选择您认为有用的三角形。