gzip 多个文件并重命名它们

gzip 多个文件并重命名它们

我必须将多个文件压缩到一个目录中并重命名它们。我不想将它们压缩成一个 zip 文件。 IE

压缩:

ABCDEPG01_20171120234905_59977
ABCDEPG02_20171120234905_59978
ABCDEPG03_20171120234905_59979

到:

ABCDEFG_DWH_ABCDEPG01_20171120234905_59977.gz
ABCDEFG_DWH_ABCDEPG02_20171120234905_59978.gz
ABCDEFG_DWH_ABCDEPG03_20171120234905_59979.gz

答案1

你只是添加一个前缀吗?那么这样的事情就可以做到:

prefix=ABCDEFG_DWH_
for f in ABCDEPG*; do
    gzip < "$f" > "$prefix$f.gz" && rm -- "$f"
done

答案2

另一种方法伊尔卡丘的它只使用gzip(在 OpenBSD 系统上发现的仅有的):

for name in ABCDEPG*; do
    gzip -o "ABCDEFG_DWH_$name.gz" -- "$name"
done

或者并行xargs(这里将产生四个并行任务):

printf '%s\n' ABCDEPG* | xargs -P 4 -I {} gzip -o ABCDEFG_DWH_{}.gz -- {}

xargs对于不太高级的实现来说,并行的事情gzip(这可以在 Linux 上工作):

printf '%s\n' ABCDEPG* |
xargs -P 4 -I {} \
    sh -c 'gzip -- "$1" && mv -- "$1.gz" "ABCDEFG_DWH_$1.gz"' sh {}

相关内容