gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:36:23 25 4
gpt4 key购买 nike

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

结果是只提取了一个文件,没有设置额外的属性。

最佳答案

#! /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”。如果目标文件系统支持通过几次调用在多个文件上设置属性(使用 xargs,每个命令有多个文件)
  • ,使用 'setfattr' 会更好
  • 不清楚输出文件夹的结构是什么。从问题来看,似乎所有文件都将放在同一个文件夹“$1”中。以下解决方案假定这是预期的行为,并且每个存档都将具有不同的文件名。如果将每个存档放置到不同的子文件夹中,则实现起来会更容易/更有效。
  • 关于bash - 解压 .tar.gz 并修改结果文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58197076/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com