解压 .tar.gz 并修改结果文件
Unpack .tar.gz and modify result files
我想编写一个 bash 脚本来解压 .tar.gz 档案,并为每个结果文件设置一个带有原始档案名称的附加属性。只是想知道解压文件的来源。
我尝试将内部文件存储在一个数组中,然后对它们进行循环。
for archive in ""*.tar.gz; do
if [ -f "${archive}" ]
then
readarray -t fileNames < <(tar tzf "$archive")
for file in "${fileNames}"; do
echo "${file}"
tar xvzf "${archive}" -C "" --no-wildcards "${file}" &&
attr -s package -V "${archive}" "${file}"
done
fi
done
结果是只提取了一个文件,没有设置额外的属性。
#! /bin/bash
for archive in ""*.tar.gz; do
if [ -f "${archive}" ] ; then
# Unpack the archive into subfolder
tar xvf "$archive" -C ""
# Assign attributes
tar tf "$archive" | (cd "" && xargs -t -L1 attr -s package -V "$archive" )
fi
done
备注:
- 脚本正在使用单个 'tar' 解压每个存档。这比一次取消一个文件更有效。它还避免了解压文件夹的问题,这将导致不必要的重复工作。
- 脚本正在使用 'attr'。最好使用 'setfattr',如果目标文件系统支持通过几次调用(使用 xargs,每个命令有多个文件)在多个文件上设置属性
- 不清楚输出文件夹的结构是什么。从问题来看,似乎所有档案都将放在同一个文件夹“$1”中。以下解决方案假定这是预期的行为,并且每个存档都将具有不同的文件名。如果每个存档都放在不同的子文件夹中,将easier/more 高效地实现。
我想编写一个 bash 脚本来解压 .tar.gz 档案,并为每个结果文件设置一个带有原始档案名称的附加属性。只是想知道解压文件的来源。
我尝试将内部文件存储在一个数组中,然后对它们进行循环。
for archive in ""*.tar.gz; do
if [ -f "${archive}" ]
then
readarray -t fileNames < <(tar tzf "$archive")
for file in "${fileNames}"; do
echo "${file}"
tar xvzf "${archive}" -C "" --no-wildcards "${file}" &&
attr -s package -V "${archive}" "${file}"
done
fi
done
结果是只提取了一个文件,没有设置额外的属性。
#! /bin/bash
for archive in ""*.tar.gz; do
if [ -f "${archive}" ] ; then
# Unpack the archive into subfolder
tar xvf "$archive" -C ""
# Assign attributes
tar tf "$archive" | (cd "" && xargs -t -L1 attr -s package -V "$archive" )
fi
done
备注:
- 脚本正在使用单个 'tar' 解压每个存档。这比一次取消一个文件更有效。它还避免了解压文件夹的问题,这将导致不必要的重复工作。
- 脚本正在使用 'attr'。最好使用 'setfattr',如果目标文件系统支持通过几次调用(使用 xargs,每个命令有多个文件)在多个文件上设置属性
- 不清楚输出文件夹的结构是什么。从问题来看,似乎所有档案都将放在同一个文件夹“$1”中。以下解决方案假定这是预期的行为,并且每个存档都将具有不同的文件名。如果每个存档都放在不同的子文件夹中,将easier/more 高效地实现。