Gzip e renomear (remover extensão .gz) todos os arquivos, exceto imagens e PDFs?

3

Eu sou capaz de gzipar todos os arquivos em um diretório ( mydirectory ) usando o comando:

gzip --suffix .gz --recursive mydirectory

Mas ...

  1. Não quero que os arquivos de imagens (.ico, .jpg, .png, .gif) e PDFs (.pdf) no diretório sejam compactados.

  2. E os arquivos que são gzipados têm a extensão .gz . Eu não quero isso. Por exemplo, eu gostaria que o arquivo index.html gzipped fosse index.html em si e NÃO index.html.gz .

Então, como faço isso de forma otimizada / eficiente?

Veja como estou fazendo isso agora (um processo bastante longo).

Compacte todos os arquivos em mydirectory , mas não exclua / substitua os arquivos originais:

cd ~/mydirectory

find . -type f | \
while read -r x
do
  gzip -c -9 "$x" > "$x.gz"
done

Remova todos os arquivos PDF e imagem gzipada:

find . -type f -iname "*.ico.gz" -exec rm -f {} \;
find . -type f -iname "*.jpg.gz" -exec rm -f {} \;
find . -type f -iname "*.png.gz" -exec rm -f {} \;
find . -type f -iname "*.gif.gz" -exec rm -f {} \;
find . -type f -iname "*.pdf.gz" -exec rm -f {} \;

Renomeie os arquivos gzipados existentes, essencialmente removendo a extensão .gz do nome deles:

cd

for f in 'find mydirectory -iname '*.gz''; do
  mv $f ${f%.gz} 
done

O que temos praticamente agora são os arquivos de texto compactados (.html, .xml, .css, .js) sem extensão .gz e imagens e PDFs descompactados / não compactados.

    
por its_me 30.03.2013 / 14:06

1 resposta

3

Passo 1: faça um backup. Em seguida, use find para filtrar seus arquivos e executar o gzip e, em seguida, mova o arquivo de volta para o nome do arquivo original:

find -type f -not \( -iname '*.ico' -or -iname '*.jpg' -or -iname '*.png' -or -iname '*.gif' \) -exec gzip "{}" \; -exec mv "{}.gz" "{}" \;

Este é um comando destrutivo, então tenha cuidado. Remova os comandos -exec... para ter certeza de que está apenas selecionando os arquivos que você deseja compactar.

    
por Oli 30.03.2013 / 14:15