comment vérifier le format d'un système de files

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