Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tester si un repertoire est sur le meme disque

9 réponses
Avatar
Remi Moyen
Salut,

Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.

En clair, un truc qui me permette de faire :
$ mount
[...]
/dev/hda5 on /usr type ext3 (rw)
$ cd /
$ mon_script
/etc est sur le même disque
/home est sur le même disque
[...]
/usr n'est pas sur le même disque

Je n'ai rien vu dans les options de test(1), y'a que -d. Je pourrais bien
sûr faire une bidouille en allant lire /etc/mtab pour y trouver tous les
volumes actuellement montés, mais ça me semble bien compliqué, est-ce que
je ne serais pas en train de rater un truc plus simple ?

Merci !
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

9 réponses

Avatar
DINH Viêt Hoà

Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.

En clair, un truc qui me permette de faire :
$ mount
[...]
/dev/hda5 on /usr type ext3 (rw)
$ cd /
$ mon_script
/etc est sur le même disque
/home est sur le même disque
[...]
/usr n'est pas sur le même disque


ls -i t'affiche le numéro d'inode.

ou "man stat" (1) puisque tu es sous linux.

--
DINH V. Hoa,

"s/^((.|[^[]|[(^.|[^^])[^]]*])*)([^*[])/14/"
-- Stéphane CHAZELAS

Avatar
Paul GABORIT
À (at) Tue, 20 Apr 2004 17:14:30 +0200,
Remi Moyen écrivait (wrote):
Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.
[...]

Je n'ai rien vu dans les options de test(1), y'a que -d. Je pourrais bien
sûr faire une bidouille en allant lire /etc/mtab pour y trouver tous les
volumes actuellement montés, mais ça me semble bien compliqué, est-ce que
je ne serais pas en train de rater un truc plus simple ?


Peut-être en comparant le résultat d'un 'df' sur le répertoire et sur son
parent (en ne s'intéressant qu'au point de montage car les valeurs
d'occupation peuvent changer)... mais ce n'est pas vraiment portable.

df / /usr
df / /etc


--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>

Avatar
JustMe
DINH Viêt Hoà wrote:



Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.

En clair, un truc qui me permette de faire :
$ mount
[...]
/dev/hda5 on /usr type ext3 (rw)
$ cd /
$ mon_script
/etc est sur le même disque
/home est sur le même disque
[...]
/usr n'est pas sur le même disque



ls -i t'affiche le numéro d'inode.

ou "man stat" (1) puisque tu es sous linux.



un bete :
df <nom du repertoire> | tail -1 | sed 's/ .*//'
te donnera le device qui contient le repertoire en question

donc ton script va donner :


#!/bin/sh

device()
{
df "$1" | tail -1 | sed 's/ .*//'
}

ROOTD=`device .`

for dir in *
do
if [ -d "$dir" ]
then
DEV=`device "$dir"`

if [ "$DEV" = "$ROOT" ]
then
echo "$dir est sur le meme disque"
else
echo "$dir n'est pas sur le meme disque"
fi
fi
done

pas exemple


Avatar
Did0
Remi Moyen writes:
Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.

En clair, un truc qui me permette de faire :
$ mount
[...]
/dev/hda5 on /usr type ext3 (rw)
$ cd /
$ mon_script
/etc est sur le même disque
/home est sur le même disque
[...]
/usr n'est pas sur le même disque


Si tu as perl tu peux essayer :

perl -e 'foreach (<*>){if(-d){print "$_t".(((stat)[0]==(stat ".")[0])?'dir':'mnt')."n"}}'

--
Dido

Avatar
Stephane Chazelas
2004-04-20, 17:14(+02), Remi Moyen:
Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.


Tu peux connaitre le st_dev avec:

zsh -c 'zmodload zsh/stat; stat +dev /win'

Avec GNU stat:

stat -c %d


--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
DINH Viêt Hoà

Si tu as perl tu peux essayer :

perl -e 'foreach (<*>){if(-d){print "$_t".(((stat)[0]==(stat ".")[0])?'dir':'mnt')."n"}}'


merci de contribuer à la légende qui fait croire que perl
est illisible !

--
DINH V. Hoa,

"s/^((.|[^[]|[(^.|[^^])[^]]*])*)([^*[])/14/"
-- Stéphane CHAZELAS

Avatar
FAb
Stephane Chazelas writes:

2004-04-20, 17:14(+02), Remi Moyen:
Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.




Et en jouant avec find et les option xdev et maxdepth ?
Placer le script dans le parent et regarder si on trouve le fils


FAb
(début de piste)


Avatar
JustMe
DINH Viêt Hoà wrote:



Si tu as perl tu peux essayer :

perl -e 'foreach (<*>){if(-d){print "$_t".(((stat)[0]==(stat ".")[0])?'dir':'mnt')."n"}}'



merci de contribuer à la légende qui fait croire que perl
est illisible !



pfff. ca vaut pas l'APL !


Avatar
Remi Moyen
On Tue, 20 Apr 2004, Remi Moyen wrote:

Salut,

Je cherche un moyen, dans un script shell, de tester si le contenu d'un
répértoire est situé sur le même volume physique que son parent, ou si
c'est au contraire un point de montage.


Merci pour toutes vos réponses !

Je vais laisser tomber le truc perl, pas tant pour la complexité de la
commande, mais plus parce que d'une part je ne connais pas perl (et j'ai
pas envie de m'y mettre) et d'autre part il me semble relativement lourd
de lancer l'interpréteur perl pleins de fois là où des appels à des
commandes simples donne le même résultat.

Sinon, j'avais pas pensé à jouer avec df, et je ne connaissais pas stat,
mais j'ai tout ce qui me faut pour que je puisse bidouiller tout seul !
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."