Donner le point de montage d'un chemin
La suite, très non-coque robuste code vous donnera le point de montage de $path
:
(for i in $(df|cut-c 63-99); do case $path $i*) echo $i;; esac; done) | tail-n 1
Est-il une meilleure façon de le faire en shell?
Postscript
Ce script est vraiment terrible, mais il a la qualité rédemptrice qu'il Fonctionne Sur Mes Systèmes. Notez que plusieurs points de montage peuvent être préfixes de $path
.
Exemples
Sur un système Linux:
ac@txtproof:~$ path=/sys/block/hda1 ac@txtproof:~$ for i in $(df -un|cut-c 57-99); do case $path $i*) echo $i;; esac; done| tail -1 /sys
Sur un système Mac OS x
cas local$ path=/dev/fd/0 cas local$ for i in $(df -un|cut-c 63-99); do case $path $i*) echo $i;; esac; done| tail -1 /dev
Note la nécessité de faire varier couper les paramètres, en raison de la façon df sortie diffère; l'utilisation de awk résout ce problème, mais même awk est non portable, étant donné le nombre de résultat de mise en forme les différentes implémentations de df retour.
Réponse
Il ressemble à munging tabulaires, est le seul moyen à l'intérieur de la coquille, mais
df -P "$path" | tail -1 | awk '{ print $NF}'
basé sur ghostdog74 réponse, est une grande amélioration sur ce que j'avais. Remarque deux nouveaux problèmes: tout d'abord, df $path
insiste sur le fait que $path
à un nom de fichier, le script que j'avais au-dessus de ne pas les soins; d'autre part, il n'y a pas de soucis au sujet de déréférencement des liens symboliques. Cela ne fonctionne pas si vous avez des points de montage avec des espaces, ce qui se produit si on a des supports amovibles avec des espaces dans le volume de leurs noms.
Il n'est pas difficile d'écrire du code Python pour faire le travail correctement.
source d'informationauteur Charles Stewart
Vous devez vous connecter pour publier un commentaire.
df
prend le chemin en paramètre, donc quelque chose comme cela devrait être assez robuste;En théorie
stat
vais vous raconter l'appareil le fichier est sur, et il devrait y avoir une sorte de cartographie de l'appareil à un point de montage.Par exemple, sur linux, cela devrait fonctionner:
Toujours été un fan de l'utilisation des options de mise en forme d'un programme, comme il peut être plus robuste que la manipulation de sortie (par exemple, si le point de montage avec des espaces). GNU
df
permet les opérations suivantes:Malheureusement, il n'existe aucune option, je peux voir pour éviter l'impression d'un en-tête, de sorte que la queue est toujours nécessaire.
je ne sais pas ce que votre sortie désirée est, donc c'est une supposition
L'utilisation de couper avec -c n'est pas vraiment fiable, depuis la sortie de df sera différent , disons de 5% peut changer à 10% et que vous manquez de certains personnages. Depuis le point de montage est toujours à l'arrière, vous pouvez utiliser les champs et les délimiteurs de champ. Ci-dessus, $NF est la dernière colonne qui est le point de montage.
Je prendrais le code source de df et de savoir ce qu'il fait d'ailleurs appel
stat
que Douglas Leeder suggère.Ligne par ligne, de l'analyse de l'
df
sortie de causer des problèmes comme ceux des lignes ressemblent souvent à desAvec la complexité de l'analyse de ces types de lignes, probablement appel
stat
et de trouver le point de montage est moins complexe.J'ai manqué cette quand j'ai regardé sur les questions préalables: Python: Obtenir le Point de Montage sur Windows ou Linuxqui dit que
os.chemin d'accès.ismount(chemin)
indique si le chemin est un point de montage.Ma préférence est pour un shell solution, mais ça a l'air assez simple.
J'utilise ceci:
Linux a ce qui permettra d'éviter des problèmes avec des espaces:
Pas sûr au sujet de BSD terre.
Si vous souhaitez utiliser uniquement les df et awk pour trouver le système de fichiers de périphérique/partage réseau ou un point de montage, et elles comprennent des espaces, vous pouvez tricher en définissant le champ séparateur de awk pour être une expression régulière qui correspond au format de l'numériques de tailles d'écran taille totale espace utilisé, l'espace disponible et de la capacité de pourcentage. Par la définition de ces colonnes que le séparateur de champ ensuite, vous êtes de gauche avec
$1
représentant le système de fichiers de l'appareil à distance/partager et$NF
représentant le chemin de montage.Prendre cela pour exemple:
Si vous essayez d'analyser ce avec le rapide et sale
awk '{print $1}'
ouawk '{print $NF}'
vous obtiendrez seulement une partie du système de fichiers/partage distant chemin et le chemin de montage et ce n'est pas bon. Maintenant, faire awk utiliser les quatre numérique des données de colonnes que le séparateur de champ.Profiter 🙂
Edit: Ces commandes sont basées sur RHEL/CentOS/Fedora mais devrait fonctionner sur n'importe quelle distribution.