2016-09-23 5 views
2

Ich fand ein paar andere Fragen wie diese, aber ihre Antworten passen nicht in meinem Fall.Wenn Datei existiert immer falsch

Für ein Video-Stream Aufnahmeprojekt habe ich ein Skript, das für einen „freien Namen“ sucht das aus dem Aufnahmeprogramm gegeben werden, so dass die gleiche Datei nicht überschrieben werden:

#!/bin/bash 
AUFPFAD="$1" 
DATEINUMMER=0 
DATEISTRING="" 
ERLEDIGT="nein" 
TESTING=1 


if [ $DATEINUMMER -eq 0 ]; then 
    if [ -d "$AUFPFAD/temp.mp4" ]; then 
     if [ $TESTING -eq 1 ]; then 
      echo "Die Datei $AUFPFAD/temp.mp4 ist vorhanden!" 
     fi 
     DATEINUMMER=$DATEINUMMER+1; 
    else 
     if [ $TESTING -eq 1 ]; then 
      echo "Die Datei $AUFPFAD/temp.mp4 ist nicht vorhanden!" 
     fi 
     DATEISTRING="temp.mp4"; 
    fi 
else 
    while [ $ERLEDIGT == "nein" ] 
    do 
     if [ -d "$AUFPFAD/temp$DATEINUMMER.mp4" ]; then 
      if [ $TESTING -eq 1 ]; then 
       echo "Die Datei $AUFPFAD/temp$DATEINUMMER.mp4 gibt's schon, also eines weiter und erneut prüfen" 
      fi 
      DATEINUMMER=$DATEINUMMER+1; 
     else 
      if [ $TESTING -eq 1 ]; then 
       echo "Die Datei $AUFPFAD/temp$DATEINUMMER.mp4 gibt's nicht, erstelle sie damit wir testen ob's dann weiter geht" 
      fi 
      DATEISTRING="temp$DATEINUMMER.mp4"; 
      ERLEDIGT="ja"; 
     fi 
    done 
fi 

if [ $TESTING -eq 1 ]; then 
    echo $DATEISTRING; 
else 
    return $DATEISTRING; 
fi 

Um zu testen, die Script habe ich den Ordner „test“ und erstellt mit touch der Datei „temp.mp4“ in diesem Ordner:

[email protected] /test # ls 
temp.mp4 
[email protected] /test # 

Aber wenn ich laufen die sc ript ich dieses Ergebnis:

[email protected] /test # /root/Dropbox/Skripte/skripte_CX30/filecheck.sh /test 
Die Datei /test/temp.mp4 ist nicht vorhanden! 
temp.mp4 
[email protected] /test # 

und das macht keinen Sinn, da die Datei dort und hat den richtigen Namen, die funktionieren sollen.

if [ -d "$AUFPFAD/temp.mp4" ]; then 

gehen in TRUE aber es ist offensichtlich FALSCH und TBH bekomme ich es nicht, warum.

Was ich getestet habe:

  1. Putting den Ausdruck ohne " in:

    if [ -d $AUFPFAD/temp.mp4 ]; then 
    

    gleichen Ergebnis.

Ich bin mir ziemlich sicher, dass ich etwas übersehen habe.

+5

Verwenden '-e' (oder' -f') statt '-d'. '-d' prüft ob das Argument ein Verzeichnis ist. – redneb

+0

Danke auch :) – EpsilonAlpha

Antwort

2

Verwenden -e wenn eine Datei besteht zu überprüfen:

if [ -e "$AUFPFAD/temp.mp4" ]; then 

-d wird verwendet für Verzeichnisse.

Folgende Operatoren gibt true zurück, wenn die Datei vorhanden ist:

-b FILE 
      FILE exists and is block special 
    -c FILE 
      FILE exists and is character special 
    -d FILE 
      FILE exists and is a directory 
    -e FILE 
      FILE exists 
    -f FILE 
      FILE exists and is a regular file 
    -g FILE 
      FILE exists and is set-group-ID 
    -G FILE 
      FILE exists and is owned by the effective group ID 
    -h FILE 
      FILE exists and is a symbolic link (same as -L) 
    -k FILE 
      FILE exists and has its sticky bit set 
    -L FILE 
      FILE exists and is a symbolic link (same as -h) 
    -O FILE 
      FILE exists and is owned by the effective user ID 
    -p FILE 
      FILE exists and is a named pipe 
    -r FILE 
      FILE exists and read permission is granted 
    -s FILE 
      FILE exists and has a size greater than zero 
    -S FILE 
      FILE exists and is a socket 
    -t FD file descriptor FD is opened on a terminal 
    -u FILE 
      FILE exists and its set-user-ID bit is set 
    -w FILE 
      FILE exists and write permission is granted 
    -x FILE 
      FILE exists and execute (or search) permission is granted 
+0

GROSSER DANK! Ich war so blind * facepalm * – EpsilonAlpha