Wie überprüfe ich, ob ein Verzeichnis in der Linux-Befehlszeile existiert?


Antworten:


40
$ if test -d /the/dir; then echo "exist"; fi 

Ich brauche es in der Kommandozeile, nicht in einem Skript.

5
Das ist die Kommandozeile. Sie können dies entweder direkt in bash eingeben oder wie folgt fortsetzen test -d /the/dir: test -d /the/dir && echo "exist" || echo "does not exist"Aber sie sind wirklich gleich.
David Rodríguez - Dribeas

Nicht jedermanns Oberteil ist bash!
Reinierpost

@ Reinierpost dann viel Glück für Sie ...
Stefano Borini

@Stefano Borini: Ich benutze immer noch, tcshweil ich zu faul bin, meine umzuschreiben .tcshrc. Aber mehr auf den Punkt gebracht: Dies könnte das Problem des OP erklärt haben.
Reinierpost

11

Angenommen, Ihre Shell ist BASH:

if [ -d /the/dir ]; then echo 'Exists'; else echo 'Not found'; fi

Syntaxfehler in der Nähe von unerwartetem Token `then '

Dann finde heraus, was deine Muschel ist. Vielleicht cshoder tcsh?
Reinierpost

8
[ -d /home/bla/ ] && echo "exits"

Kann ich so etwas wie ELSE haben, um einen Text anzuzeigen, auch wenn das Verzeichnis nicht existiert?

Umgehung:[ -d /home/bla/ ] && echo "exist" ; [ ! -d /home/bla/ ] && echo "doesnt exist"
learningloop

7

Die kanonische Methode besteht darin, das Dienstprogramm test (1) zu verwenden:

test -d path

Dabei ist "Pfad" der Pfadname des betreffenden Verzeichnisses.


Der Befehl scheint nicht von alleine zu sein, sondern wenn er mit einem verknüpft ist echo "Directory Exists".
Ejaz

2

[ -d "YOUR_DIR" ] && echo "is a dir"

z.B:

[ -d / ] && echo "root dir"

AUSGABE: root dir.


[-d: Befehl nicht gefunden, das ist, was ich bekomme

Zwischen "[" und "-" MUSS ein Leerzeichen stehen. Dies sollte auf Bourne- und Bash-Shell funktionieren.

0

Um zu überprüfen, ob ein Verzeichnis in einem Shell-Skript vorhanden ist, können Sie Folgendes verwenden:

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

Um das Gegenteil zu überprüfen, fügen Sie !vor dem-d ->[ ! -d ....]


Willkommen bei Super User! Dies dupliziert eine andere Antwort und fügt keinen neuen Inhalt hinzu. Bitte posten Sie keine Antwort, es sei denn, Sie haben tatsächlich etwas Neues beizutragen.
DavidPostill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.