Seus critérios estão errados. *.*
retornará todos os arquivos com extensões. Por exemplo, foo.gz
. Agora você está verificando o seguinte, no pseudocódigo:
if [ foo.gz.gz does not exist ]
compress foo.gz to foo.gz.gz
else
don't overwrite foo.gz.gz
Assim, seu comando de teste irá sempre se ramificar para compactar algo porque o teste sempre será avaliado como verdadeiro. No final, você sempre substituirá seus arquivos, porque "$f.gz"
expandirá para foo.gz.gz
.
Se o seu requisito real é combinar tudo, menos .gz
arquivos em seu diretório atual, o Bash tem maneiras mais fáceis de fazer isso, por exemplo, usando a opção extglob
e negação.
#!/bin/bash
FOLDER=$1
shopt -s extglob
cd "$FOLDER"
for f in !(*.gz); do
if [[ ! -d "$f" ]]; then
gzip "$f"
fi
done
Você pode incluir uma verificação para saber se o nome do arquivo retornado não é realmente um diretório - a menos que você queira compactar diretórios também.
Mas, na verdade, o Linux oferece melhores ferramentas para encontrar arquivos que correspondam a determinados critérios. Para (recursivamente) encontrar todos os arquivos que não terminam com .gz
e compactá-los:
find /some/where -type f ! -iname '*.gz' -exec gzip '{}' \;
Se você não quiser recursão:
find /some/where -type f -maxdepth 1 ! -iname '*.gz' -exec gzip '{}' \;