Проблема со скриптами bash

Проблема со скриптами bash

Я плохо разбираюсь в bash-скриптах и ​​мне нужна помощь со следующим:

#!/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 {} \;

Проблема здесь в строке ncftpput. Если я просто делаю [ echo "working" ] вместо этого, все в порядке, но когда я пробую строку ncftpput, она просто выдает мне [ строка 5: [: слишком много аргументов ]

команда ncftpput сама по себе работает нормально.

Есть идеи?

решение1

-eИспользовать подстановку внутри нельзя, []так как она, скорее всего, вернет более одного результата, что приведет к ошибке «слишком много аргументов».

Можешь попробовать:

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

или

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

Также используйте отступы, пробелы и продолжение строки, чтобы сделать ваш код более читабельным:

#!/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 {} \;

решение2

Попробуй это.

#!/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 {} \;

решение3

Ну, если он жалуется на слишком большое количество аргументов, разбейте его с помощью for.

#!/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 {} \;

Использование "" вокруг $FILE гарантирует, что файлы с пробелами в имени не будут делать ничего неожиданного.

Связанный контент