wieder mal bash => if [ -e dateimaske]

  • Hallo !


    Irgendwie will das unter Ubuntu 14.04 nicht....
    ich habe ein script mit einer funktion



    das standalone funktioniert.... da ich aber bei for ... in .... do einen Fehlermeldung kriege habe ich das Ganze (wie oben) als Funktion deklariert und wollte die Funktion erst aufrufen wenn so eine Datei überhaupt existiert...
    und zwar so

    Code
    if [ -e "*84???-??_main.xml" ]
    	then
     	copy_gal
    fi


    Aber das ignoriert er gefliessentlich... ich hab auch schon ein echo blablabla reingemacht und dann sieht man das er nicht das abarbeitet was nach dem "then" steht obwhl eine Datei existiert die in die Maske passt



    Gruss Gerd

    vdr => p8b75-m lx / pentium g2020t / 8 GB Ram / zotac gt 630 / cine S2 V5.5 / 60 gb ocz ssd / 640 gb wd scorpio blue / display noritake 256x64-3900 / chenbro PC71023 gehaeuse / yavdr stable / softhddevice


    spielsystem => p8b75-m le / intel core i3 3220T / ubuntu lts 14.04 / 16 GB ram / zotac gt 630 / cine S2 V6.2 / yavdr stable pakete / softhddevice / pulseaudio+alsa


    spielwiese => Zotac Zbox ID45 / 120 GB mSATA / via Satip => Octopus Net / yavdr stable / softhddevice

  • und zwar so

    Code
    if [ -e "*84???-??_main.xml" ]
    	then
     	copy_gal
    fi


    Aber das ignoriert er gefliessentlich... ich hab auch schon ein echo blablabla reingemacht und dann sieht man das er nicht das abarbeitet was nach dem "then" steht obwhl eine Datei existiert die in die Maske passt


    Google hilft:
    Check if a file exists with wildcard in shell script


    Zitat

    Two bugs with your code: (1) The asterisk has to be outside the double quotes (a quoted asterisk loses it special wildcard meaning), and (2) if multiple files match the pattern, multiple arguments will be passed to the [ command, most likely causing [ to exit with an error and therefore be interpreted as no files matching.


    Alternativen werden dort ebenfalls genannt.


    Christian

  • test -e funktioniert nur mit einer einzelnen Datei - da kann man keine Wildcards nutzen.


    Folgendes könnte bei Dir funktionieren:

    Code
    if [ $(ls *84???-??_main.xml 2>/dev/null | wc -l) -gt 0 ]; then
      ...
    fi


    2>/dev/null damit die Fehlermeldung nicht nervt, falls keine Datei da ist.


    Vielleicht hilft das ja


    mfg sd

  • ls ist eine denkbar fehleranfällige Methode, um über Dateien zu iterieren - dafür gibt es die nativen Bash-Funktionen oder auch find, wenn man spezielle Kriterien benötigt.
    Man könnte z.B. auch mit mv ein Backup mit Suffix erstellen lassen, wenn eine Datei überschrieben werden würde, das man dann bei Bedarf mit find in den gewünschten Ordner verschiebt:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi !


    Danke erst mal.... das hier

    Code
    shopt -s nullglob # disable error when nothing matches our globbing


    Hat gebracht.... da kann ich es so machen wie ich es ursprünglich mal hatte ohne es als Funktion zu deklarieren....

    Code
    for i in *84???-??_main.xml; do
     	if [ -e "$NEWPATH_84/$i" ]
     	then
          	mv $NEWPATH_84/$i $OLDPATH/$i.$(date +"%Y%m%d_%H%M_%S") && mv $i $NEWPATH_84/$i
     	else
          	mv $i $NEWPATH_84/$i
    	fi
    done


    Jetzt muss ich mich dem anderen mal wieder zuwenden.... :)


    Gruss Gerd

    vdr => p8b75-m lx / pentium g2020t / 8 GB Ram / zotac gt 630 / cine S2 V5.5 / 60 gb ocz ssd / 640 gb wd scorpio blue / display noritake 256x64-3900 / chenbro PC71023 gehaeuse / yavdr stable / softhddevice


    spielsystem => p8b75-m le / intel core i3 3220T / ubuntu lts 14.04 / 16 GB ram / zotac gt 630 / cine S2 V6.2 / yavdr stable pakete / softhddevice / pulseaudio+alsa


    spielwiese => Zotac Zbox ID45 / 120 GB mSATA / via Satip => Octopus Net / yavdr stable / softhddevice

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!