我必须将多个文件压缩到一个目录中并重命名它们。我不想将它们压缩成一个 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 {}