2016-09-23 2 views
2

Я нашел еще пару таких вопросов, но их ответы не подходят мне.Если файл существует всегда false

Для проекта записи видео потока Я написал сценарий, который ищет «свободное имя», которая будет возвращена к программе записи так же файл не будет переписан:

#!/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 

, чтобы проверить Сценарий я создал папку «тест» и создан с touchфайл «temp.mp4» внутри этой папки:

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

Но когда я бег СБН НИИЮ я получаю этот результат:

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

и что не имеет смысла, потому что файл существует и имеет правильное название, которое должно работать.

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

происходит в ИСТИНА, но это, очевидно, FALSE и ТБЙ я не понимаю, почему.

То, что я испытал:

  1. Ввод выражения без " в:

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

    же результата.

Я уверен, что я что-то упустил.

+5

Используйте '-e' (или' -f') вместо '-d'. '-d' проверяет, является ли его аргумент каталогом. – redneb

+0

Спасибо тоже :) – EpsilonAlpha

ответ

2

Использование -e, чтобы проверить, существует ли файл :

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

-d используется для каталогов.

следующие операторы возвращает истину, если файл существует:

-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

БОЛЬШОЕ СПАСИБО! Я был настолько слеп * facepalm * – EpsilonAlpha