Ich möchte in einem Bash-Skript überprüfen, welcher Dateisystemtyp ein Verzeichnis ist.
Die Idee ist so etwas wie
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
linux
bash
shell-script
filesystems
Dremor
quelle
quelle
Antworten:
Verwenden Sie
df
. Sie können ihm einen Pfad übergeben, der Ihnen die Dateisysteminformationen für diesen Pfad gibt. Wenn Sie den Dateisystemtyp benötigen, verwenden Sie den-T
Schalter wie folgt:Um den Dateisystemtyp zu extrahieren, können Sie ihn analysieren (verwenden Sie den
-P
Schalter, umdf
Zeilenumbrüche zu vermeiden , wenn der Geräteteil zu lang ist):Sie können diesen Wert also in einem
if
Konstrukt wie dem folgenden verwenden:Beachten Sie, dass die Gerätespalte Leerzeichen enthalten kann (dies ist jedoch selten der Fall). In diesem Fall schlägt die Analyse fehl.
quelle
Auf einem System, auf dem der Befehl GNU stat installiert ist (wie bei jeder Standard-Linux-Distribution), können Sie den fs-Typ für eine bestimmte Datei abrufen, ohne mit dem folgenden
stat
Befehl analysieren zu müssen :-f
weiststat
an, anstelle der Datei Informationen über das Dateisystem bereitzustellen, und-c %T
legt fest, dass das Ausgabeformat nur den vom Menschen lesbaren Dateisystemtyp (%T
) enthält.Sie können das also (in Bash) verwenden als:
man stat
wird weitere Informationen liefern.quelle
Mit
findmnt
(Teil vonutil-linux
):Bei Verwendung der Option
Wenn der Pfad keine Mountpoint-Datei oder ein Mountpoint-Verzeichnis ist, werdenfindmnt
die Pfadelemente in umgekehrter Reihenfolge überprüft, um den Mountpoint abzurufen. Die beiden anderen Optionen unterdrücken die Kopfzeile:-n, --noheading
und wählen die Spalten aus, die aufgelistet werden sollen:-o, --output
df
fromcoreutils
hat eine ähnliche Option--output=
, um nur bestimmte Felder zu drucken, wiefstype
z.Es gibt jedoch keine Möglichkeit, den Header zu entfernen, sodass Sie die Ausgabe an z
| sed 1d
quelle
findmnt
Werkzeug, auch mit TUI-Ausgabe für Strichzeichnungen. Vielen Dank!