Gibt es eine schnelle und selbsterklärende Möglichkeit, programmgesteuert im Shell-Skript oder in Perl anzugeben, ob sich ein Pfad auf einem Remote-Dateisystem (NFS oder Ähnlichem) oder einem lokalen befindet? Oder ist dies der einzige Weg dies zu tun, um/etc/fstab zu analysieren und den Dateisystemtyp zu überprüfen?Wie kann ich feststellen, ob sich eine Datei in einem Remote-Dateisystem mit Perl befindet?
Antwort
stat -f -c %T <filename>
sollte tun, was Sie wollen. Möglicherweise möchten Sie auch -l
Sie können "df -T" verwenden, um den Dateisystemtyp für das Verzeichnis abzurufen, oder die Option -t verwenden, um die Berichterstellung auf bestimmte Typen (z. B. nfs) zu beschränken, und wenn "keine Dateisysteme verarbeitet" zurückgegeben wird. dann ist es nicht einer von denen, nach denen du suchst.
df -T $dir | tail -1 | awk '{print $2;}'
Nicht tragbar - "df -T" funktioniert z. B. nicht mit Solaris. –
Wenn alle Netzwerk-Dateisysteme die Host-Pfad-Semantik für den Gerätenamen verwenden, dann können Sie nach folgendem suchen: im Gerätenamen oder etwas in diesem Sinne. –
Auf einigen Systemen ist die Gerätenummer für NFS-Dateien negativ. So
print "remote" if (stat($filename))[0] < 0
Wenn Sie df
auf einem Verzeichnis Informationen erhalten nur von dem Gerät es sich befindet, die z.B. für das aktuelle Verzeichnis:
df .
Dann können Sie einfach die Ausgabe analysieren, z.
df . | tail -1 | awk '{print $1}'
, um den Gerätenamen zu erhalten.
ich getestet habe folgende auf solaris7,8,9 & 10 und es scheint zuverlässig zu sein
/bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}'
sollten Sie den fs-Typen haben, anstatt zu versuchen eine entsprechen „host: Pfad“ in Ihr Mount-Punkt.
Wiederum nicht tragbar zu Solaris (obwohl ich den Befehl auf dem Computer habe, ist es kein Standardproblem). –