Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

pathchk - Pfadnamen überprüfen

&pagelevel(4)&pagelevel

(check pathnames)


Das Kommando pathchk überprüft, ob ein oder mehrere Pfadnamen gültig sind (d.h. sie können zum Zugriff auf eine Datei oder zum Erstellen einer Datei verwendet werden, ohne einen Syntaxfehler zu verursachen) und ob sie portierbar sind (d.h. es ist keine Namensanpassung nötig). Weiterreichende Prüfungen zur Portierbarkeit können mit der Option -p durchgeführt werden.

Standardmäßig überprüft das Kommando pathchk die Komponenten aller Argumente pathname auf der Basis des zugrundeliegenden Dateisystems. In folgenden Fällen wird eine Fehlermeldung zu dem betroffenen Argument pathname ausgegeben:

  • Es ist länger als die maximal zulässige Länge von Pfadnamen ({PATH_MAX} Byte).

  • Es enthält eine Komponente, die länger ist als die maximal zulässige Länge von Dateinamen ({NAME_MAX} Byte) im jeweiligen Verzeichnis.

  • Er enthält eine Komponente in einem Verzeichnis, das nicht durchsucht werden kann.

  • Er enthält eine Komponente mit Zeichen, die im jeweiligen Verzeichnis ungültig sind.

  • Die Namenslänge einer Datei oder Verzeichnisses in einem bs2fs-Dateisystem widerspricht nicht den Regeln eines bs2fs-Dateisystems.

Es ist kein Fehler für pathchk, wenn eine oder mehrere Komponenten eines Arguments pathname nicht existieren, solange eine Datei mit dem angegebenen Pfadnamen erstellt werden kann, die die oben aufgeführten Überprüfungen erfüllt.


Syntax


pathchk[ -p] pathname...

Optionen

-p

Führt die Überprüfungen nicht für das zugrundeliegende Dateisystem durch, sondern auf Grundlage allgemeiner Portabilitätsbedingungen. In folgenden Fällen wird eine Fehlermeldung zu dem betroffenen Argument pathname ausgegeben:

  • Es ist länger als die maximal zulässige Länge für portierbare Pfadnamen ({_PO SIX_PATH_MAX} Byte).

  • Es enthält eine Komponente, die länger ist als die maximale Länge für portierbare Dateinamen ({_POSIX_NAME_MAX} Byte).

  • Er enthält eine Komponente mit Zeichen, die nicht in der portierbaren Zeichenmenge für Dateinamen enthalten sind.

pathname

Der zu überprüfende Pfadname.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos pathchk:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Hinweis

Mit dem Kommando test kann überprüft werden, ob ein bestimmter Pfadname eine bereits vorhandene Datei angibt. Es gibt jedoch keine Auskunft darüber, ob eine Komponente des Pfadnamens abgeschnitten wurde (in einem Verzeichnis, für das die Funktion {_PO SIX_NO_TRUNC} nicht aktiviert ist). Das Kommando pathchk prüft nicht, ob eine bestimmte Datei vorhanden ist. Es prüft lediglich, ob ein bestimmter Pfadname existiert bzw. ob er ohne Namensverkürzung erstellt werden kann. Mit der Option noclobber in der Shell (vgl. Beschreibung von set) kann eine Datei eindeutig erstellt werden.

Beispiel

Sie können folgendermaßen prüfen, ob alle Pfadnamen in einem importierten Datenaustauscharchiv auf dem aktuellen System zulässig und eindeutig sind:

pax -f archive | sed -e \*(hO/ == .*/s///\*(hO | xargs pathchk
if [ $? -eq 0 ]
then
    pax -r -f archive
else
    echo Investigate problems before importing files.
    exit 1
fi

Sie können folgendermaßen prüfen, ob alle Dateien in der aktuellen Verzeichnishierarchie auf ein anderes System übertragen werden können, das allgemeine Portabilitätsbedingungen erfüllt und das Kommando pax zur Verfügung stellt:

find . -print | xargs pathchk -p
if [ $? -eq 0 ]
then
    pax -w -f archive .
else
    echo Portable archive cannot be created.
    exit 1
fi

Sie können folgendermaßen überprüfen, ob ein angegebener Pfadname eine lesbare Datei benennt und ob eine Anwendung durch Erweiterung des Dateinamens eine Datei erstellen kann, deren Pfadname nicht automatisch verkürzt wird und die keine bereits vorhandene Datei überschreibt.

case $- in
    *C*)    reset="";;
    *)      reset="set +C"
            set -C;;
esac
test -r "$path" && pathchk "$path.out" &&
    rm "$path.out" > "$path.out"
if [ $? -ne 0 ]; then
    printf "%s: %s not found or %s.out fails \
creation checks.\n" $0 "$path" "$path"
    $reset  # reset the noclobber option in case a trap
            # on EXIT depends on it
    exit 1
fi
$reset
PROCESSING < "$path" > "$path.out"

Diesem Beispiel liegt folgendes zugrunde:

  1. PROCESSING stellt den Code dar, den die Anwendung benützt, um $path zu verwenden, sobald überprüft worden ist, dass $path.out die gewünschten Bedingungen erfüllt.

  2. Der Status der Option noclobber ist unbekannt, wenn dieser Code aufgerufen wurde, und sollte beim Verlassen wieder auf den Status gesetzt werden, den er beim Aufrufen dieses Codes hatte. (Die Variable reset wird in diesem Beispiel zum Wiederherstellen des ursprünglichen Status verwendet.)

  3. Beachten Sie die Verwendung der folgenden Konstruktion:

    rm "$path.out" > "$path.out"

    1. Das Kommando pathchk hat zu diesem Zeitpunkt bereits geprüft, dass $path.out nicht verkürzt wird.

    2. Wenn die Option noclobber gesetzt ist, prüft die Shell vor dem Aufruf von rm, ob $path.out nicht bereits vorhanden ist.

    3. Wenn die Shell $path.out erfolgreich erstellt hat, entfernt rm diese wieder, so dass die Anwendung die Datei im Schritt PROCESSING erneut erstellen kann.

    4. Wenn die Datei beim Aufrufen des Schritts PROCESSING bereits vorhanden sein soll, sollte rm "$path.out" > "$path.out" durch > "$path.out" ersetzt werden.
      Hierdurch wird sichergestellt, dass die Datei $path.out noch nicht vorhanden war, und sie wird gleichzeitig für die Verwendung durch PROCESSING angelegt.

Siehe auch

test