Problema com o script bash

2

Eu sou péssimo com scripts bash e preciso de ajuda com o seguinte:

#!/bin/bash

if [ -e Pretty* ];then
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

Problema aqui é a linha ncftpput .. se eu fizer um simples [echo "working"] em vez disso, tudo está OK, mas quando eu tento o ncftpput-line ele me dá [linha 5: [: muitos argumentos  ]

o comando ncftpput sozinho funciona bem ..

Alguma idéia?

    
por eple 06.02.2011 / 13:41

3 respostas

4

Você não pode usar globbing com -e dentro de [] porque provavelmente retornará mais de um resultado, o que causará um erro de muitos argumentos.

Você pode tentar:

shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]

ou

if [[ "$(echo Pretty*)" != "Pretty*" ]]

Além disso, use recuo, espaços e continuação de linha para tornar seu código mais legível:

#!/bin/bash

shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]; then
    ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 \
        /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
    echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;
    
por 06.02.2011 / 16:14
0

Experimente.

#!/bin/bash -x

if [ -e "Pretty*" ];then
'ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*'
else
echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;
    
por 06.02.2011 / 13:56
0

Bem, se estiver reclamando de muitos argumentos, divida-o com um para.

#!/bin/bash

if [ -e Pretty* ];then
   for FILE in Pretty*
   do
       ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ "$FILE"
   done
else
   echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

Usar o "" ao redor de $ FILE garantirá que os arquivos com espaços em seus nomes não façam nada inesperado.

    
por 06.02.2011 / 14:09

Tags