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
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
Réponses:
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 -T
commutateur, 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 -P
commutateur pour éviter de df
casser 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 if
construction 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.
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 stat
commande:
stat -f -c %T filename
-f
indique stat
de fournir des informations sur le système de fichiers au lieu du fichier et -c %T
dé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.
Avec findmnt
(une partie de util-linux
):
findmnt -no fstype -T /path/to/file
Lors de l'utilisation de l'option
-T, --target cheminsi le chemin n'est pas un fichier ou un répertoire de point de montage,
findmnt
vé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, --noheading
et sélectionnez la ou les colonnes à répertorier:-o, --output
df
from coreutils
a une option similaire --output=
pour imprimer uniquement certains champs, comme fstype
par 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
findmnt
outil mignon , même avec une sortie TUI de dessin au trait. Merci!