4462 Stimmen

Wie kann ich prüfen, ob ein Verzeichnis in einem Bash-Shell-Skript existiert?

Mit welchem Befehl kann man in einem Bash-Shell-Skript prüfen, ob ein Verzeichnis existiert oder nicht?

42voto

muralikrishna Punkte 419
if [ -d "$Directory" -a -w "$Directory" ]
then
    #Statements
fi

Der obige Code prüft, ob das Verzeichnis existiert und ob es beschreibbar ist.

1 Stimmen

-a ist in seiner Wirkung identisch mit -e. Es wurde "veraltet", und von seiner Verwendung wird abgeraten.

34voto

Neil Neyman Punkte 2099

Mehr Funktionen durch find

  • Überprüfen Sie das Vorhandensein des Ordners in Unterverzeichnissen:

      found=`find -type d -name "myDirectory"`
      if [ -n "$found" ]
      then
          # The variable 'found' contains the full path where "myDirectory" is.
          # It may contain several lines if there are several folders named "myDirectory".
      fi
  • Überprüfen Sie das Vorhandensein von einem oder mehreren Ordnern anhand eines Musters im aktuellen Verzeichnis:

      found=`find -maxdepth 1 -type d -name "my*"`
      if [ -n "$found" ]
      then
          # The variable 'found' contains the full path where folders "my*" have been found.
      fi
  • Beide Kombinationen. Im folgenden Beispiel wird geprüft, ob der Ordner im aktuellen Verzeichnis vorhanden ist:

      found=`find -maxdepth 1 -type d -name "myDirectory"`
      if [ -n "$found" ]
      then
          # The variable 'found' is not empty => "myDirectory"` exists.
      fi

0 Stimmen

Hallo Niel. Ihre Idee kann nützlich sein, um die Existenz von Verzeichnissen in Abhängigkeit von einem Muster wie zu überprüfen: find -maxdepth 1 -type d -name 'pattern' . Haben Sie etwas dagegen, wenn ich diesen Trick in Ihrer Antwort anfüge? Prost ;)

31voto

Vishal Punkte 18723
DIRECTORY=/tmp

if [ -d "$DIRECTORY" ]; then
    echo "Exists"
fi

Online ausprobieren

0 Stimmen

Erinnern Sie sich an space nach [ -> [` `-d . ich bekam eine Fehlermeldung wegen eines fehlenden Leerzeichens

4 Stimmen

AGAIN Diese Antwort wurde bereits 2008 gegeben, allerdings mit nützlicheren Erläuterungen. Neu ist hier nur der Online-Spielplatz.

27voto

santosh Punkte 353

Geben Sie diesen Code in die Bash-Eingabeaufforderung ein:

if [ -d "$DIRECTORY" ]; then
    # If true this block of code will execute
fi

23voto

e-satis Punkte 547539

Um einen kugelsicheren Ansatz zu erhalten, sollten Sie eigentlich mehrere Instrumente verwenden:

DIR_PATH=`readlink -f "${the_stuff_you_test}"` # Get rid of symlinks and get abs path
if [[ -d "${DIR_PATH}" ]] ; Then # Now you're testing
    echo "It's a dir";
fi

Sie brauchen sich keine Gedanken über Leerzeichen und Sonderzeichen zu machen, solange Sie "${}" .

Beachten Sie, dass [[]] ist nicht so portabel wie [] aber da die meisten Leute mit modernen Versionen der Bash arbeiten (schließlich arbeiten die meisten Leute nicht einmal mit der Kommandozeile :-p), ist der Nutzen größer als die Mühe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X