Domanda

Esiste un modo rapido e sporco per dire a livello di codice, nello script di shell o in Perl, se un percorso si trova su un filesystem remoto (nfs o simili) o su uno locale?Oppure l'unico modo per farlo è analizzare /etc/fstab e controllare il tipo di filesystem?

È stato utile?

Soluzione

stat -f -c %T <filename> dovrebbe fare quello che vuoi. Potresti anche voler -l

Altri suggerimenti

Puoi usare " df -T " per ottenere il tipo di filesystem per la directory, oppure utilizzare l'opzione -t per limitare il reporting a tipi specifici (come nfs) e se ritorna con " nessun file system elaborato " ;, quindi non è uno di quelli che stai cercando.

df -T $dir | tail -1 | awk '{print $2;}'

Se si utilizza df su una directory per ottenere informazioni solo sul dispositivo in cui risiede, ad es. per la directory corrente:

df .

Quindi, puoi semplicemente analizzare l'output, ad esempio

df . | tail -1 | awk '{print $1}'

per ottenere il nome del dispositivo.

Ho testato quanto segue su solaris7,8,9 e 10 e sembra essere affidabile

/bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}'

Dovrebbe darti il ​​tipo fs anziché provare a trovare la corrispondenza per un "host: percorso" nel punto di montaggio.

Su alcuni sistemi, il numero di dispositivo è negativo per i file NFS. Così,

print "remote" if (stat($filename))[0] < 0
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top