Проблема со сценариями удара

Я ужасен со сценариями удара и нуждаюсь в некоторой помощи со следующим:

#!/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 команда хорошо работает..

Какие-либо идеи?

2
задан 06.02.2011, 20:03

3 ответа

Вы не можете использовать 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 {} \;
4
ответ дан 08.12.2019, 06:30

Попробуйте.

#!/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 {} \;
0
ответ дан 08.12.2019, 06:30

Ну, если это жалуется на слишком много аргументов, повредите его с для.

#!/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 гарантирует, чтобы файлы с пробелами на их имени не делали ничего неожиданного.

0
ответ дан 08.12.2019, 06:30

Теги

Похожие вопросы