Erro de script de shell no nome do arquivo com espaços

1

Eu tenho um script bash que pesquisa cada arquivo estático localizado na raiz do meu servidor e armazena uma versão gzipped ao lado de cada arquivo. Eu peguei de link

O problema é que ele não funciona com nomes de arquivos com espaços, meus sites não usam nenhum agora, e eu tentarei nunca, mas eu não sou o único trabalhando na frente -final, talvez eu não consiga controlá-lo sempre, então só quero ter certeza de que esse script funciona para arquivos que também têm espaços. Espero que alguém possa dar uma olhada e me ajude a consertar.

#! /bin/bash

FILETYPES=("*.html" "*.woff" "*.css" "*.jpg" "*.jpeg" "*.gif" "*.png" "*.js")
# specify a list of directories to check recursively
DIRECTORIES="/usr/share/nginx/www/"

for currentdir in $DIRECTORIES
do
   for i in "${FILETYPES[@]}"
   do
      find $currentdir -iname "$i" -exec bash -c 'PLAINFILE="{}";GZIPPEDFILE="{}".gz; \
         if [ -e "$GZIPPEDFILE" ]; \
         then   if [ 'stat --printf=%Y $PLAINFILE' -gt 'stat --printf=%Y $GZIPPEDFILE' ]; \
                then    echo "$GZIPPEDFILE outdated, regenerating"; \
                        gzip -9 -f -c $PLAINFILE > $GZIPPEDFILE; \
                 fi; \
         else echo "$GZIPPEDFILE is missing, creating it"; \
              gzip -9 -c $PLAINFILE > $GZIPPEDFILE; \
         fi' \;
  done
done
    
por Raul Guichard 01.08.2013 / 00:56

1 resposta

2

Cite as variáveis com nomes de arquivos nelas, para que elas não sejam interpretadas como vários argumentos para um comando:

#! /bin/bash

FILETYPES=("*.html" "*.woff" "*.css" "*.jpg" "*.jpeg" "*.gif" "*.png" "*.js")
# specify a list of directories to check recursively
DIRECTORIES="/usr/share/nginx/www/"

for currentdir in $DIRECTORIES
do
   for i in "${FILETYPES[@]}"
   do
      find "$currentdir" -iname "$i" -exec bash -c 'PLAINFILE="{}";GZIPPEDFILE="{}".gz; \
         if [ -e "$GZIPPEDFILE" ]; \
         then   if [ 'stat --printf=%Y "$PLAINFILE"' -gt 'stat --printf=%Y "$GZIPPEDFILE"' ]; \
                then    echo "$GZIPPEDFILE outdated, regenerating"; \
                        gzip -9 -f -c "$PLAINFILE" > "$GZIPPEDFILE"; \
                 fi; \
         else echo "$GZIPPEDFILE is missing, creating it"; \
              gzip -9 -c "$PLAINFILE" > "$GZIPPEDFILE"; \
         fi' \;
  done
done
    
por 01.08.2013 / 01:14