Bash 解压缩.tar.gz并修改结果文件

Bash 解压缩.tar.gz并修改结果文件,bash,centos,tar,Bash,Centos,Tar,我想编写一个bash脚本来解包.tar.gz归档文件,并为每个结果文件设置一个带有原始归档文件名称的附加属性。只是想知道解包文件的来源 我尝试将内部文件存储在一个数组中,然后进行for循环 for archive in "$1"*.tar.gz; do if [ -f "${archive}" ] then readarray -t fileNames < <(tar tzf "$archive") for fi

我想编写一个bash脚本来解包.tar.gz归档文件,并为每个结果文件设置一个带有原始归档文件名称的附加属性。只是想知道解包文件的来源

我尝试将内部文件存储在一个数组中,然后进行for循环

for archive in "$1"*.tar.gz; do
    if [ -f "${archive}" ]
        then
            readarray -t fileNames < <(tar tzf "$archive")
            for file in "${fileNames}"; do
                echo "${file}"
                tar xvzf "${archive}" -C "$1" --no-wildcards "${file}" &&
                attr -s package -V "${archive}" "${file}"
            done
    fi
done
结果是只提取一个文件,并且没有设置额外的属性

#! /bin/bash

for archive in "$1"*.tar.gz; do
    if [ -f "${archive}" ] ; then
        # Unpack the archive into subfolder $1
        tar xvf "$archive" -C "$1"
        # Assign attributes
        tar tf "$archive" | (cd "$1" && xargs -t -L1 attr -s package -V "$archive" )
    fi
done

注:

脚本使用单个“tar”解压每个归档文件。这比一次取消一个文件的分页效率更高。它还可以避免打开文件夹时出现问题,这将导致不必要的重复工作。 脚本正在使用“attr”。如果目标文件系统支持使用“setfattr”在多个文件上设置属性,则最好使用xargs进行几个调用,每个命令有多个文件 不清楚输出文件夹的结构是什么。从这个问题来看,似乎所有的档案都将放在同一个文件夹$1中。下面的解决方案假定这是预期的行为,并且每个归档文件都有不同的文件名。如果每个归档文件都要放在不同的子文件夹中,则实施起来会更容易/更高效。
您的脚本生成语法错误:“a.sh:6:a.sh:语法错误:意外重定向”。考虑按惯例修复“RealStale'”命令,脚本应该接受完整的文件名FIL1.TAR.GZ,而不是前缀。如果您的输入是file1.tar.gz、file2.tar.gz,请使用脚本文件*.tar.gz在我的Centos 7系统上启动scriptNo语法错误