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

11

Je voudrais vérifier, dans un script bash, quel type de système de fichiers est un répertoire.

L'idée est quelque chose comme

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
Dremor
la source
Voulez-vous le point de montage ou le type de système de fichiers? Quelle serait votre sortie souhaitée?
terdon

Réponses:

11

Utilisez df. Vous pouvez lui passer un chemin, et il vous donnera les informations du système de fichiers pour ce chemin. Si vous avez besoin du type de système de fichiers, utilisez le -Tcommutateur, 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 fichiers, vous pouvez l'analyser (utilisez le -Pcommutateur pour éviter de dfcasser les lignes si la partie périphérique est trop longue):

$ df -PT test | awk 'NR==2 {print $2}'
ext4

Vous pouvez donc utiliser cette valeur dans une ifconstruction comme ceci:

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

Attention, la colonne de périphérique peut contenir des espaces (mais c'est rare), auquel cas l'analyse échouera.

marinus
la source
12

Sur un système avec la commande GNU stat installée (comme avec à peu près n'importe quelle distribution Linux standard), vous pouvez obtenir le type fs pour un fichier donné sans nécessiter aucune analyse en utilisant la statcommande:

stat -f -c %T filename

-findique statde fournir des informations sur le système de fichiers au lieu du fichier et -c %Tdéfinit le format de sortie pour inclure uniquement le type de système de fichiers lisible par l'homme ( %T).

Vous pouvez donc utiliser cela (en bash) comme:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat fournira plus d'informations.

rici
la source
3

Avec findmnt(une partie de util-linux):

findmnt -no fstype -T /path/to/file

Lors de l'utilisation de l'option

-T, --target chemin
si le chemin n'est pas un fichier ou un répertoire de point de montage, findmntvérifie les éléments de chemin dans l'ordre inverse pour obtenir le point de montage. Les deux autres options suppriment la ligne d'en-tête: -n, --noheadinget sélectionnez la ou les colonnes à répertorier:-o, --output


dffrom coreutilsa une option similaire --output=pour imprimer uniquement certains champs, comme fstypepar exemple:

df --output=fstype /path/to/file

il n'y a pas d'option pour supprimer l'en-tête, vous devrez donc diriger la sortie vers par exemple | sed 1d

don_crissti
la source
Un findmntoutil mignon , même avec une sortie TUI de dessin au trait. Merci!
Incnis Mrsi du