gzip vários arquivos e renomeie-os

1

Eu tenho que gzip vários arquivos em um diretório e renomeá-los. Eu não quero compactá-los em um único arquivo zip. ou seja,

gzip:

ABCDEPG01_20171120234905_59977
ABCDEPG02_20171120234905_59978
ABCDEPG03_20171120234905_59979

para:

ABCDEFG_DWH_ABCDEPG01_20171120234905_59977.gz
ABCDEFG_DWH_ABCDEPG02_20171120234905_59978.gz
ABCDEFG_DWH_ABCDEPG03_20171120234905_59979.gz
    
por Scott Mick 15.11.2018 / 18:15

2 respostas

3

Você está apenas adicionando um prefixo? Então, algo assim poderia fazer:

prefix=ABCDEFG_DWH_
for f in ABCDEPG*; do
    gzip < "$f" > "$prefix$f.gz" && rm -- "$f"
done
    
por 15.11.2018 / 18:30
1

Uma abordagem alternativa ao do ilkkachu que usa apenas gzip (as encontradas nos sistemas OpenBSD apenas:

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

Ou em paralelo com xargs (aqui, quatro tarefas paralelas serão geradas):

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

Esse paralelo xargs para implementações menos avançadas de gzip (isso funcionaria no Linux):

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

Tags