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



我想编写一个 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

笔记:

  1. 脚本使用单个"tar"解压缩每个存档。这比一次取消一个文件的节奏更有效。它还可以避免解压缩文件夹的问题,这将导致不必要的重复工作。
  2. 脚本正在使用"attr"。如果目标文件系统支持使用"setfattr",则最好使用"setfattr",只需几次调用即可在多个文件上设置属性(使用 xargs,每个命令有多个文件(
  3. 目前尚不清楚输出文件夹的结构是什么。从问题来看,似乎所有档案都将放在同一个文件夹"$1"中。以下解决方案假定这是预期行为,并且每个存档将具有不同的文件名。如果要将每个存档放入不同的子文件夹中,则实施起来会更容易/更有效。

最新更新