BASH-Befehl: Dateien auf Existenz prüfen
Prüfung auf Existenz einer Datei mit dem Befehl [
Wenn du prüfen möchtest, ob eine Datei existiert, kannst du den Befehl [
verwenden. Dieser Befehl nimmt einen Pfad zu einer Datei als Argument und gibt einen Exit-Status zurück:
- 0, wenn die Datei existiert
- 1, wenn die Datei nicht existiert
Syntax:
[ -f /Pfad/zur/Datei ]
Beispiel:
[ -f /home/benutzer/datei.txt ]
Fragen und Antworten:
Wie kann ich den Exit-Status des Befehls [ überprüfen?
Den Exit-Status eines Befehls kannst du mit dem Befehl echo $?
abfragen. Dieser Befehl gibt den Exit-Status des zuletzt ausgeführten Befehls zurück.
Was passiert, wenn der Pfad zur Datei falsch ist?
Wenn der Pfad zur Datei falsch ist, gibt der Befehl [
den Exit-Status 1 zurück.
Welche Sonderzeichen sind im Pfad zur Datei zulässig?
Im Pfad zur Datei sind alle Zeichen zulässig, außer dem Zeilenumbruch.
Kann ich Platzhalter im Pfad zur Datei verwenden?
Ja, du kannst Platzhalter im Pfad zur Datei verwenden, um mehrere Dateien auf einmal zu prüfen. Beispielsweise prüft der folgende Befehl, ob eine Datei mit dem Namen datei.*
existiert:
[ -f /home/benutzer/datei.* ]
Verwendung von Platzhaltern für die Dateibenennung
Platzhalterzeichen ermöglichen es dir, bei der Prüfung auf die Existenz einer Datei eine ganze Gruppe von Dateien anhand eines allgemeinen Namensmusters zu berücksichtigen. Dies ist nützlich, wenn du dir nicht sicher bist, wie die genaue Dateibenennung lautet, oder wenn du eine Reihe ähnlicher Dateien prüfen möchtest.
Globale Platzhalter
Die folgenden Platzhalterzeichen werden von der Bash-Shell unterstützt und können in Verbindung mit dem Befehl [
verwendet werden:
-
*
: Passt zu jeder beliebigen Zeichenfolge, einschließlich leerer Zeichenfolgen. -
?
: Passt zu jedem einzelnen Zeichen. -
[]
: Passt zu einem beliebigen Zeichen innerhalb der eckigen Klammern. Beispiel:[0-9]
findet alle Dateien, deren Namen mit einer Zahl beginnen.
Beispiele
Nehmen wir an, du möchtest prüfen, ob eine Datei mit dem Namen text*
existiert. Folgender Befehl würde dies tun:
Weitere Einzelheiten findest du in: Sortierung von Linux-Dateien nach Datum mit dem Befehl "ls"
[ -e text* ]
Wenn es eine Datei mit einem Namen gibt, der mit text
beginnt, gibt der Befehl true
zurück, andernfalls false
.
Du kannst Platzhalter auch verwenden, um eine ganze Gruppe von Dateien zu prüfen. Beispielsweise würde folgender Befehl prüfen, ob eine Datei mit der Endung .txt
existiert:
[ -e *.txt ]
Vorsichtsmaßnahmen
Bei der Verwendung von Platzhaltern solltest du Folgendes beachten:
- Achte darauf, die Platzhalterzeichen ordnungsgemäß zu escapen, wenn sie in einem regulären Ausdruck verwendet werden.
- Überprüfe die Ergebnisse sorgfältig, da Platzhalterzeichen unerwartete Übereinstimmungen verursachen können.
- Vermeide es, Platzhalter für Dateinamen mit Sonderzeichen oder Leerzeichen zu verwenden.
Prüfung auf Existenz mehrerer Dateien
Solltest du die Existenz mehrerer Dateien überprüfen wollen, kannst du den Befehl find
einsetzen. find
durchsucht ein Verzeichnis (oder mehrere Verzeichnisse) nach bestimmten Kriterien. Um nach mehreren Dateien zu suchen, kannst du Platzhalter verwenden, wie z.B. *
(jedes Zeichen) oder ?
(ein einzelnes Zeichen).
Verwendung von Platzhaltern
Um beispielsweise zu prüfen, ob alle Dateien mit der Endung .txt
im aktuellen Verzeichnis existieren, verwendest du folgenden Befehl:
find . -name "*.txt"
Dabei durchsucht find
das aktuelle Verzeichnis (-name
) nach Dateien, deren Name der Endung .txt
entspricht.
Umgang mit Sonderfällen
Bei der Suche nach mehreren Dateien musst du einige Sonderfälle berücksichtigen:
-
Versteckte Dateien: Um auch versteckte Dateien einzubeziehen, verwende die Option
-ls
. Beispiel:find . -ls -name "*.txt"
Weitere Einzelheiten findest du in: systemctl: Der Befehl zum Verwalten von Systemd-Diensten
-
Sonderzeichen: Wenn Dateinamen Sonderzeichen enthalten (z.B. Leerzeichen), musst du sie mit Anführungszeichen umschließen: `find . -name ""file mit Leerzeichen.txt"``
-
Lange Dateinamen: Falls du sehr lange Dateinamen hast, kannst du die Option
-maxdepth
verwenden, um die Suchtiefe zu beschränken:find . -maxdepth 1 -name "*.txt"
Umgang mit leeren Dateien
Leere Dateien können für dich eine Herausforderung darstellen, wenn du ihre Existenz prüfen willst. Das liegt daran, dass der Befehl [ -f ]
zwar prüft, ob eine Datei existiert, aber nicht feststellt, ob sie leer ist.
Prüfung auf Leere mit `stat`
Um zu prüfen, ob eine Datei leer ist, kannst du den Befehl stat
verwenden. Die Option --printf
ermöglicht es dir, bestimmte Informationen über die Datei abzurufen, darunter auch ihre Größe:
$ stat --printf="%s" datei.txt
5
Im obigen Beispiel hat datei.txt
eine Größe von 5 Byte. Wenn die Datei leer ist, gibt stat
eine Größe von 0 zurück:
$ stat --printf="%s" leere_datei.txt
0
Verwendung des Befehls `test`
Eine weitere Möglichkeit, leere Dateien zu prüfen, ist der Befehl test
. Mit der Option -s
kannst du prüfen, ob eine Datei eine Größe ungleich Null hat:
Erfahre mehr unter: Chmod rekursiv: Datei- und Verzeichnisberechtigungen in der Tiefe verstehen
$ test -s datei.txt
$ echo $?
0
Der Befehl test
gibt den Rückgabewert 1 zurück, wenn die Datei leer ist, und 0, wenn sie eine Größe ungleich Null hat.
Sonderfall: Ausgeblendete Dateien
Wenn du mit ausgeblendeten Dateien arbeitest, musst du möglicherweise die Option -a
mit find
verwenden. Diese Option weist find
an, auch versteckte Dateien einzuschließen:
$ find ./ -type f -name ".hidden_file"
./.hidden_file
Prüfung auf Existenz von Verzeichnissen
Wenn du wissen möchtest, ob ein Verzeichnis existiert, kannst du den Befehl [ -d ]
verwenden. Die Syntax lautet:
[ -d VERZEICHNIS ]
Dabei ist VERZEICHNIS
der Pfad zum Verzeichnis, auf dessen Existenz du prüfen möchtest.
Zurückgabewerte
Der Befehl gibt einen von zwei Rückgabewerten zurück:
-
0
, wenn das Verzeichnis existiert -
1
, wenn das Verzeichnis nicht existiert
Verwendung
Um beispielsweise zu prüfen, ob das Verzeichnis /home/benutzer/Dokumente
existiert, würdest du folgenden Befehl ausführen:
[ -d /home/benutzer/Dokumente ]
Platzierhalter
Du kannst auch Platzhalter verwenden, um auf mehrere Verzeichnisse zu prüfen. Beispielsweise prüft der folgende Befehl, ob die Verzeichnisse /home/benutzer/Dokumente
und /home/benutzer/Bilder
existieren:
[ -d /home/benutzer/{Dokumente,Bilder} ]
Umgang mit leeren Verzeichnissen
Der Befehl [ -d ]
prüft nur auf die Existenz eines Verzeichnisses, unabhängig davon, ob es leer ist oder nicht. Wenn du prüfen möchtest, ob ein Verzeichnis nicht leer ist, kannst du den Befehl [ -n ]
verwenden. Die Syntax lautet:
Für nähere Informationen besuche: Der mächtige Linux-Befehl 'rm': Ein umfassender Leitfaden
[ -n VERZEICHNIS ]
Codebeispiel
Hier ist ein Codebeispiel, in dem geprüft wird, ob das Verzeichnis /home/benutzer/Dokumente
existiert und nicht leer ist:
if [ -d /home/benutzer/Dokumente ] && [ -n /home/benutzer/Dokumente ]; then
# Das Verzeichnis existiert und ist nicht leer
else
# Das Verzeichnis existiert nicht oder ist leer
fi
Prüfung auf Existenz von Links
Links sind Verweise auf andere Dateien oder Verzeichnisse. Überprüfe mithilfe des BASH-Befehls -L
, ob es sich bei einer bestimmten Datei um einen Link handelt:
Verwendung von -L
Führe den folgenden Befehl aus, um zu prüfen, ob link.txt
ein Link ist:
[ -L link.txt ] && echo "Ist ein Link" || echo "Ist kein Link"
Platzhalter für Dateinamen
Du kannst Platzhalter verwenden, um mehrere Links zu prüfen. Beispielsweise überprüft dieser Befehl alle .txt
-Dateien im Verzeichnis Dokumente
:
find /Dokumente -name '*.txt' -type l -print
Umgang mit leeren Links
Leere Links verweisen auf keine andere Datei oder kein Verzeichnis. Du kannst sie mit dem folgenden Befehl prüfen:
[ -L link.txt -a ! -s link.txt ] && echo "Leerer Link"
Sonderfälle
Beachte folgende Sonderfälle:
-
Versteckte Dateien: Verwende
find
mit der Option-xdev
für versteckte Dateien. -
Sonderzeichen: Escape Sonderzeichen in Dateinamen mit
\
. - Lange Dateinamen: Verwende Anführungszeichen um Dateinamen mit Leerzeichen oder Sonderzeichen.
Codebeispiele
Beispiel 1: Prüfung auf einen einzelnen Link
if [ -L "link.txt" ]; then
echo "link.txt ist ein Link"
fi
Beispiel 2: Prüfung auf mehrere Links in einem Verzeichnis
for file in /Dokumente/*.txt; do
if [ -L "$file" ]; then
echo "$file ist ein Link"
fi
done
Sonderfälle: Versteckte Dateien, Sonderzeichen, lange Dateinamen
Versteckte Dateien
Versteckte Dateien werden unter Linux und macOS mit einem Punkt (.) am Anfang des Dateinamens gekennzeichnet. Um diese Dateien in deiner Prüfung einzubeziehen, musst du den Pfad zur Datei mit dem Präfix "." angeben. Beispiel:
if [ -f ./.versteckteDatei ]; then
echo "Versteckte Datei gefunden"
fi
Sonderzeichen
Sonderzeichen wie Leerzeichen, Tabs und Sonderzeichen können in Dateinamen vorkommen. Um diese Zeichen in deiner Prüfung zu berücksichtigen, musst du den Dateinamen in Anführungszeichen setzen. Beispiel:
Erfahre mehr unter: Effektives Auffinden von Dateien nach Namen unter Linux
if [ -f "datei mit Sonderzeichen.txt" ]; then
echo "Datei mit Sonderzeichen gefunden"
fi
Lange Dateinamen
Wenn Dateinamen länger als 255 Zeichen sind, kannst du sie nicht mit der einfachen [ -f ]
-Prüfung testen. In diesem Fall musst du die GNU-Erweiterung [ -e ]
verwenden, die auch lange Dateinamen unterstützt. Beispiel:
if [ -e "sehr_langer_Dateiname_mit_mehr_als_255_Zeichen.txt" ]; then
echo "Lange Datei gefunden"
fi
Codebeispiele für gängige Szenarien
Prüfung auf Existenz einer Datei
if [ -f /pfad/zur/datei ]; then
# Datei existiert
else
# Datei existiert nicht
fi
Verwendung von Platzhaltern für die Dateibenennung
if [ -f "/pfad/zur/*.txt" ]; then
# Mindestens eine TXT-Datei im angegebenen Pfad existiert
else
# Keine TXT-Datei im angegebenen Pfad gefunden
fi
Prüfung auf Existenz mehrerer Dateien
for datei in datei1 datei2 datei3; do
if [ -f "/pfad/zur/$datei" ]; then
# Datei existiert
else
# Datei existiert nicht
fi
done
Umgang mit leeren Dateien
if [ -s /pfad/zur/datei ]; then
# Datei ist nicht leer
else
# Datei ist leer oder existiert nicht
fi
Prüfung auf Existenz von Verzeichnissen
if [ -d /pfad/zum/verzeichnis ]; then
# Verzeichnis existiert
else
# Verzeichnis existiert nicht
fi
Prüfung auf Existenz von Links
if [ -L /pfad/zum/link ]; then
# Link existiert
else
# Link existiert nicht
fi
Sonderfälle: Versteckte Dateien, Sonderzeichen, lange Dateinamen
Versteckte Dateien
if [ -f ~/.versteckteDatei ]; then
# Versteckte Datei existiert
fi
Sonderzeichen
if [ -f "/pfad/zur/datei mit Leerzeichen" ]; then
# Datei mit Leerzeichen im Namen existiert
fi
Lange Dateinamen
if [ -f "/pfad/zur/sehr langen Datei mit mehr als 255 Zeichen im Namen" ]; then
# Datei mit langem Namen existiert
fi
Verwandte Artikel
- Grep-Befehl in Linux: Eine umfassende Anleitung
- Linux 'tee': Das unverzichtbare Tool für flexible Datenverarbeitung
- Umbenennen mehrerer Dateien unter Linux: Eine umfassende Anleitung
- Die ultimative Anleitung zum Find-Befehl: Suchen und Ersetzen in Linux effizient
- Linux wc: Zeilen, Wörter und Zeichen effektiv zählen
- Linux Clear Screen: So räumen Sie Ihre Konsole auf
- Tar-Entpacken: Eine Schritt-für-Schritt-Anleitung zum Extrahieren komprimierter Dateien
- Sortierung von Dateien nach Größe mit dem Befehl "ls" in Linux
- Sichere Anmeldung mit SSH: Generierung eines SSH-Schlüssels unter Linux
- Effiziente Datei- und Verzeichnisverwaltung mit dem Linux-Befehl 'mv'
- So ermitteln Sie die Größe einer Datei unter Linux
- Linux cut: Manipulieren und Verarbeiten von Textdaten effizient
Neue Posts
World of Warcraft auf Linux spielen: Eine guide für Abenteurer
Einführung in World of Warcraft
Node.js NVM: Antworten auf die häufigsten Fragen
Entwicklung
Professionelle Gmail-HTML-Signaturen: Erstellen, Gestalten und Nutzen
Marketingstrategien
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
HTML-Content: Der ultimative Leitfaden zur Erstellung ansprechender Webseiten
SEO-Optimierung
Das HTML-Title-Attribut: Ein Leitfaden zur Optimierung von Titeln für SEO und Benutzerfreundlichkeit
Online-Marketing
HTTP-Statuscodes: Ihre Bedeutung und Verwendung im Web
Einführung in HTTP-Statuscodes
Besucherzähler für Websites: Tracking Ihres Website-Traffics für Erfolg
SEO-Optimierung
Beschleunigen Sie die Dateneingabe mit HTML Datalist
Webentwicklung
HTML in PUG konvertieren: Einfach und schnell gemacht
Webentwicklung
Beliebte Posts
SteamCMD: Der umfassende Leitfaden zur Verwaltung von Steam-Servern
Sicherheitsrichtlinien
POST-Anfragen: Erstellen, Senden und Empfangen von Daten im Web
Webentwicklung
LaTeX: Das mächtige Werkzeug für hochwertiges Dokumentenschreiben
Dokumentenerstellung
Wiederherstellung beschädigter Linux-Dateisysteme mit fsck: Ein umfassender Leitfaden
Fehlerbehebung
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
Gigacube Admin: Zugang zu den erweiterten Einstellungen Ihres Routers
Fehlerbehebung
Linux Mint Themes: Personalisieren Sie Ihren Desktop
Open Source
TCPdump-Beispiele: Paketakquise und Netzwerkdiagnose
Fehlerbehebung
Mounten von ISO-Images unter Linux: Eine Schritt-für-Schritt-Anleitung
Anleitungen
Linux Open File: Anleitung zum Öffnen, Bearbeiten und Löschen von Dateien aus dem Terminal
Open Source