Я ужасен со сценариями удара и нуждаюсь в некоторой помощи со следующим:
#!/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 строка.. если я просто делаю простое [эхо "работа"] вместо этого, все в порядке, но когда я пробую ncftpput-строку, это просто дает мне [строку 5: [: слишком много аргументов]
одна только ncftpput команда хорошо работает..
Какие-либо идеи?
Вы не можете использовать globbing с -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 {} \;
Ну, если это жалуется на слишком много аргументов, повредите его с для.
#!/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 гарантирует, чтобы файлы с пробелами на их имени не делали ничего неожиданного.