Scriptaufruf funktioniert nicht - einzelne Befehle schon

  • Hallo zusammen,


    ich habe mir mit Hilfe der Beiträge hier: Dateien per Script löschen ein meiner Bedürfnisse angepasstes Script gebaut. Einziges Problem: bei Ausführung des Scripts bekomme ich ein paar Fehler, gebe ich Befehle der Reihe nach in die Shell ein funktioniert alles. Bin momentan auf etwas verlorenen Posten. Anbei das Script und die entsprechenden Ausgaben:


    Code
    executionFolder="/share/syslog/"folderList="$executionFolder/folderList.log"deletedList="$executionFolder/deletedList.log"find $executionFolder -type f > $folderListfind $executionFolder/* -mtime +550 -exec rm {} \; && find $executionFolder/* -type d -empty -exec rmdir {} \;while IFS= read -r LINEdo# file does not exist -> "! -f ..."if [ ! -f "$LINE" ]then# log file, that was deletedecho $LINE >> $deletedListfidone < $folderList

    Bei Ausführung des Scripts kommt das hier:

    Code
    : No such file or directory: /share/syslog/
    find: ‘/share/syslog/\r/*’: No such file or directory
    /tmp/clearBackup.sh: line 14: syntax error near unexpected token `done'
    'tmp/clearBackup.sh: line 14: `done < $folderList

    Danke schonmal für eure Hilfe :)

  • Na da steht doch alles!


    "No such file or directory", den Ordner bzw. den Pfad /share/syslog/ gibt es nicht, d.h. die Variable folderList ist leer weil die Datei folderlist.log nicht gefunden wird, daher der syntax error.




    Wie funktioniert das manuell wenn der Pfad nicht existiert?


    Gruss

  • executionFolder...ist da nicht ein Slash zu viel?
    Beim Zusammenbau hast du executionFolder/
    Macht dann:: /share/syslog//

  • Jepp, das dürfte es sein und erklärt auch warum es manuell funktioniert!


    Muss doch mal einen Blindenhund kaufen... :whistling:


    Gruss

  • Hallo ihr beiden,


    danke für die schnellen Antworten. Leider war's das nicht.
    Jetzt kommt das unten stehende, ohne den zusätzlichen /.


    Code
    : No such file or directory: /share/syslogfind: ‘/share/syslog\r/*’: No such file or directory/tmp/clearBackup.sh: line 15: syntax error near unexpected token `done''tmp/clearBackup.sh: line 15: `done < $folderList

    Falls ihr mir nicht glaubt, das Verzeichnis gibt es:

    Code
    [/] #
    [/] # cd share/syslog
    [/share/syslog] #
  • Wie sieht das Script aktuell aus? Bitte coding tag verwenden,macht das identifizieren der Zeilen einfacher ;)
    Welches find reklamiert er da,das erste?
    Du hast einmal zwei find in einer Zeile durch &&, diese vielleicht Mal trennen.
    Dann müsstest du drei find Zeilen haben und der Fehler wäre leichter nachvollziehbar weil wir dann wissen welches find er genau reklamiert.


    Sehe gerade er hat da noch "\r/*" im Pfad,woher kommt das "\r"? Im Script oben kann ich es nicht sehen...

    Einmal editiert, zuletzt von puffi ()

  • Hi,


    woher das \r kommt weiß ich auch nicht, ist mir auch schon aufgefallen. Hier das Script mit getrenntem find wie vorgeschlagen:


    Bash
    #!/bin/bash#executionFolder="/share/syslog"folderList="$executionFolder/folderList.log"deletedList="$executionFolder/deletedList.log"find $executionFolder -type f > $folderListfind $executionFolder/* -mtime +450 -exec rm {} \;find $executionFolder/* -type d -empty -exec rmdir {} \;while IFS= read -r LINEdoif [ ! -f "$LINE" ]thenecho $LINE >> $deletedListfidone < $folderList

    und die Ausgabe:

    Code
    : No such file or directory: /share/syslog
    find: missing argument to `-exec'
    find: missing argument to `-exec'
    /tmp/clearBackup.sh: line 15: syntax error near unexpected token `done'
    'tmp/clearBackup.sh: line 15: `done < $folderList
  • executionFolder startet mit einem Leerzeichen das muss weg.
    Und bitte die zwei find wieder mit && verbinden.
    Meine Anweisung war schlicht unvollständig daher kommt es zu den exec Fehlern, sorry

    2 Mal editiert, zuletzt von puffi ()

  • OK... komisch,vielleicht wegen web,wer weiss.
    Ich habe dein Script bei mir auf der QNAP angewendet,extra eine Freigabe syslog dafür angelegt.
    Bei mir läuft es bis zum letzten find durch, im letzen wird empty verwendet das fehlt bei meiner Version.
    Er hat aber die Datei folderList.log angelegt und befüllt.
    Wenn du das Script manuell startest,wie genau machst du das?


    Habe das Script nochmal auf dem Laptop laufen lassen und da lief es komplett durch, also sieht nicht schlecht aus. Bleibt die Frage von oben.

    Einmal editiert, zuletzt von puffi ()

  • Script in notepad++ öffnen
    unter "Bearbeiten" - "Format Zeilenende" - "Konvertieren zu Unix (LF)" auswählen und speichern!