Je voudrais vérifier, dans un script bash, sur quel système de files tapez un directory.
L'idée est quelque chose comme
if [path] is on a [filesystem] filesystem then filesystem specific command end if
Utilisez df
. Vous pouvez lui transmettre un path, et il vous donnera les informations du système de files pour ce path. Si vous avez besoin du type de système de files, utilisez le commutateur -T
, comme ceci:
$ df -T test Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda2 ext4 182634676 32337180 141020160 19% /home
Pour extraire le type de système de files, vous pouvez l'parsingr (utilisez le paramètre -P
pour éviter de df
des lignes si la partie du périphérique est trop longue):
$ df -PT test | awk 'NR==2 {print $2}' ext4
Vous pouvez donc utiliser cette valeur dans une construction if
comme ceci:
if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then it is an ext4 filesystem fi
Attention, la colonne du périphérique peut contenir des espaces (mais c'est rare), auquel cas l'parsing échouera.
Sur un système avec la command GNU stat installée (comme avec n'importe quelle dissortingbution Linux standard), vous pouvez get le type fs pour un file donné sans nécessiter d'parsing en utilisant la command stat
:
stat -f -c %T filename
-f
indique à stat
de fournir des informations sur le système de files au lieu du file et -c %T
définit le format de sortie pour inclure uniquement le type de système de files lisible par l'user ( %T
).
Donc vous pouvez utiliser cela (en bash) comme:
if [[ $(stat -f -c %T filename) == ext4 ]]; then # ext4 specific command fi
man stat
fournira plus d'informations.
Avec findmnt
(une partie de util-linux
):
findmnt -no fstype -T /path/to/file
Lorsque vous utilisez l'option
-T, - path cible
si le path n'est pas un file ou un directory de sharepoint findmnt
, findmnt
vérifie les éléments de path dans l'ordre inverse pour get le sharepoint assembly. Les deux autres options suppriment la ligne d'en-tête: -n, --noheading
et select la ou les colonnes à -n, --noheading
: -o, --output
df
from coreutils
a une option similaire --output=
pour n'imprimer que certains champs, comme fstype
eg:
df --output=fstype /path/to/file
il n'y a pas d'option pour supprimer l'en-tête, donc vous devrez forcer la sortie à par exemple | sed 1d
| sed 1d