
Ich bin furchtbar mit Bash-Skripten und brauche bei Folgendem Hilfe:
#!/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 {} \;
Das Problem hier ist die ncftpput-Zeile. Wenn ich stattdessen einfach ein [ echo "working" ] eingebe, ist alles in Ordnung, aber wenn ich die ncftpput-Zeile versuche, bekomme ich nur [ Zeile 5: [: zu viele Argumente ]
Der Befehl ncftpput allein funktioniert einwandfrei.
Irgendwelche Ideen?
Antwort1
Sie können Globbing nicht mit -e
inside verwenden []
, da dies wahrscheinlich mehr als ein Ergebnis zurückgibt, was zu einem Fehler wegen zu vieler Argumente führt.
Du kannst es versuchen:
shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]
oder
if [[ "$(echo Pretty*)" != "Pretty*" ]]
Verwenden Sie außerdem Einrückungen, Leerzeichen und Zeilenfortsetzungen, um Ihren Code lesbarer zu machen:
#!/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 {} \;
Antwort2
Versuch es.
#!/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 {} \;
Antwort3
Nun, wenn es sich über zu viele Argumente beschwert, unterbrechen Sie es mit einem „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 {} \;
Die Verwendung von "" um $FILE stellt sicher, dass Dateien mit Leerzeichen im Namen nichts Unerwartetes tun.