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 -T
Schalter 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 -P
Schalter, um df
Zeilenumbrü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 if
Konstrukt 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 stat
Befehl analysieren zu müssen :
stat -f -c %T filename
-f
weist stat
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:
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
findmnt
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
from coreutils
hat eine ähnliche Option --output=
, um nur bestimmte Felder zu drucken, wie fstype
z.
df --output=fstype /path/to/file
Es gibt jedoch keine Möglichkeit, den Header zu entfernen, sodass Sie die Ausgabe an z | sed 1d
findmnt
Werkzeug, auch mit TUI-Ausgabe für Strichzeichnungen. Vielen Dank!