
Я плохо разбираюсь в 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 гарантирует, что файлы с пробелами в имени не будут делать ничего неожиданного.