Come posso sapere se un file si trova su un filesystem remoto con Perl?
-
08-07-2019 - |
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?
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