Tus criterios son incorrectos. *.*devolverá todos los archivos con extensiones. Por ejemplo, foo.gz. Ahora está comprobando lo siguiente, en pseudocódigo:
if [ foo.gz.gz does not exist ]
compress foo.gz to foo.gz.gz
else
don't overwrite foo.gz.gz
Por lo tanto, su comando de prueba siempre se ramificará para comprimir algo porque la prueba siempre se evaluará como verdadera. Al final, siempre sobrescribirá sus archivos, porque "$f.gz"se expandirá a foo.gz.gz.
Si su requisito real es hacer coincidir todo menos los .gzarchivos en su directorio actual, Bash tiene formas más fáciles de hacerlo, por ejemplo, utilizando la extglobopción y la negación.
#!/bin/bash
FOLDER=$1
shopt -s extglob
cd "$FOLDER"
for f in !(*.gz); do
if [[ ! -d "$f" ]]; then
gzip "$f"
fi
done
Puede incluir una comprobación de si el nombre del archivo devuelto no es realmente un directorio, a menos que también desee comprimir directorios.
Pero en realidad, Linux le brinda mejores herramientas para encontrar archivos que coincidan con ciertos criterios. Para (recursivamente) encontrar todos los archivos que no terminan .gzy comprimirlos:
find /some/where -type f ! -iname '*.gz' -exec gzip '{}' \;
Si no quieres recurrencia:
find /some/where -type f -maxdepth 1 ! -iname '*.gz' -exec gzip '{}' \;
cd "$FOLDER"ygzip "$f".