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
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
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 -TSchalter wie folgt:
$ df -T test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda2 ext4 182634676 32337180 141020160 19% /home
Um den Dateisystemtyp zu extrahieren, können Sie ihn analysieren (verwenden Sie den -PSchalter, um dfZeilenumbrüche zu vermeiden , wenn der Geräteteil zu lang ist):
$ df -PT test | awk 'NR==2 {print $2}'
ext4
Sie können diesen Wert also in einem ifKonstrukt wie dem folgenden verwenden:
if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
it is an ext4 filesystem
fi
Beachten Sie, dass die Gerätespalte Leerzeichen enthalten kann (dies ist jedoch selten der Fall). In diesem Fall schlägt die Analyse fehl.
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 statBefehl analysieren zu müssen :
stat -f -c %T filename
-fweist statan, anstelle der Datei Informationen über das Dateisystem bereitzustellen, und -c %Tlegt fest, dass das Ausgabeformat nur den vom Menschen lesbaren Dateisystemtyp ( %T) enthält.
Sie können das also (in Bash) verwenden als:
if [[ $(stat -f -c %T filename) == ext4 ]]; then
# ext4 specific command
fi
man stat wird weitere Informationen liefern.
Mit findmnt(Teil von util-linux):
findmnt -no fstype -T /path/to/file
Bei Verwendung der Option
-T, --target PfadWenn der Pfad keine Mountpoint-Datei oder ein Mountpoint-Verzeichnis ist, werden
findmntdie Pfadelemente in umgekehrter Reihenfolge überprüft, um den Mountpoint abzurufen. Die beiden anderen Optionen unterdrücken die Kopfzeile: -n, --noheadingund wählen die Spalten aus, die aufgelistet werden sollen:-o, --output
dffrom coreutilshat eine ähnliche Option --output=, um nur bestimmte Felder zu drucken, wie fstypez.
df --output=fstype /path/to/file
Es gibt jedoch keine Möglichkeit, den Header zu entfernen, sodass Sie die Ausgabe an z | sed 1d
findmntWerkzeug, auch mit TUI-Ausgabe für Strichzeichnungen. Vielen Dank!