Gzip av flere filer

Kategori overført fra Linux1

Gzip av flere filer

Innleggav svish » fre 28.12.2007 4:00

Har lyst til å få til en en-linjers kommando (eventuelt et script, men kan ikke bash-script eller noe...) som kan rekursivt lage en .gz fil av alle .js og .css filer i en mappe.

gzip -r directory

klarer det NESTEN. Den fungerer ypperlig, men den sletter originalen... gunzip gjør det samme.

Har man prototype.js får man prototype.js.gz og prototype.js er borte. Kjører man gunzip får man tilbake prototype.js og prototype.js.gz er borte.

Jeg trenger begge! Hvordan kan jeg få til dette på en enkel måte?

Brukerens avatar
medlem i 146 måneder
 

Re: Gzip av flere filer

Innleggav TO » fre 28.12.2007 5:02

Forslag til bash-kode basert på:
1. http://www.math.utah.edu/docs/info/gzip_4.html
2. http://www.math.utah.edu/docs/info/gzip_5.html
Kode: Merk alt
for file in *.js *.css
do
      gzfile=$file.gz
      gzip  -c "$file" >"$gzfile"
done


Merk at *.js og *.css kan overraske dersom ingen slike filer i mappa,
medlem i 160 måneder
 

Re: Gzip av flere filer

Innleggav svish » fre 28.12.2007 5:50

Jeg har fått til!

1. Putt følgende kode i en fil (for eksempel doit):
Kode: Merk alt
#!/bin/bash

# Javascript files
find $1 -name "*.jgz" -exec rm -v {} \;
for x in `find $1 -name "*.js"`
do
  gzip -cv "$x" > "$x".jgz
done

# Css files
find $1 -name "*.cgz" -exec rm -v {} \;
for x in `find $1 -regex ".+\.css$"`
do
  gzip -cv "$x" > "$x".cgz
done

2. Kjør chmod +x doit
3. Kjør ./doit mappederduvilgjøredet
4. Putt følgende kode i en .htaccess i mappenderdugjordedet
Kode: Merk alt

# Compression
RewriteEngine on
ReWriteCond %{HTTP:accept-encoding} (gzip.*)
RewriteCond %{REQUEST_FILENAME}.jgz -f
RewriteRule ^(.+) $1.jgz [L]

ReWriteCond %{HTTP:accept-encoding} (gzip.*)
RewriteCond %{REQUEST_FILENAME}.cgz -f
RewriteRule ^(.+) $1.cgz [L]


AddType "text/javascript;charset=iso-8859-1" .jgz
AddEncoding gzip .jgz

AddType "text/css;charset=iso-8859-1" .cgz
AddEncoding gzip .cgz


Voila :D

Brukerens avatar
medlem i 146 måneder
 

Re: Gzip av flere filer

Innleggav svish » lør 29.12.2007 19:16

Laget ny versjon av mitt doit script. Lagt til litt feilsjekking, pluss at den nå kun pakker dersom det trengs. I tillegg så vil den nå slette den pakkede fila dersom den ender opp med å bli større enn originalen. Noe jeg fant ut kunne skje i blant...

Kode: Merk alt
#!/bin/bash

if [ -z $1 ]
then
  echo "Usage $0 directory"
  exit
fi

#Usage: compress directory old_suffix new_suffix
function compress() {
 
  # Check for arguments
  if [ -z $1 -o -z $2 -o -z $3 ]
    then
      return
  fi
 
  # For every file in directory of type old_suffix
  for x in $(find $1 -name "*.$2" -print)
  do
    # Skip if compressed version already exist and is newer
    if [ "$x.$3" -nt "$x" ]
      then
        echo -e "$x\t--"
        continue
    fi
   
    # Try to compress
    if gzip -cv9 "$x" > "$x.$3"
      then
        # Delete if compressed is larger
        if (( $(find "$x.$3" -printf "%s") > $(find "$x" -printf "%s") ))
          then
            echo -en "$x.$3\tremoved (greater than original)"
            rm "$x.$3"
        fi
    fi
  done 
}

# Compress js and css files
compress $1 js jgz
compress $1 css cgz

Brukerens avatar
medlem i 146 måneder
 


Returner til Utvikling i Linux



Hvem er i Forumene

Registrerte brukere: Google [Bot]