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

问题描述 投票:0回答:1

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

我试图将内部文件存储在数组中,然后进行循环。

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

结果是仅提取一个文件,并且未设置任何额外的属性。

bash centos tar
1个回答
1
投票
#! /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

注意:

  1. 脚本正在用单个'tar'解压缩每个档案。这比一次取消定档一个文件的效率要高。它还避免了解压缩文件夹的问题,这将导致不必要的重复工作。
  2. 脚本正在使用'attr'。如果目标文件系统支持通过几次调用来设置多个文件的属性(使用xargs,每个命令包含多个文件),则最好使用'setfattr'。
  3. 尚不清楚输出文件夹的结构是什么。从该问题来看,似乎所有存档都将放置在同一文件夹“ $ 1”中。以下解决方案假定这是预期的行为,并且每个存档将具有不同的文件名。如果每个存档都放在不同的子文件夹中,则将更容易/更高效地实施。
© www.soinside.com 2019 - 2024. All rights reserved.