我不擅长编写 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-line 时,它只会给我 [ 第 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 周围使用“”将确保名称中带有空格的文件不会执行任何意外操作。