Как я могу определить, находится ли файл в удаленной файловой системе с Perl? - PullRequest
11 голосов
/ 17 ноября 2008

Существует ли быстрый и грязный способ программно, в сценарии оболочки или в Perl, указать, находится ли путь в удаленной файловой системе (nfs или подобной) или локальной? Или это единственный способ выполнить синтаксический анализ / etc / fstab и проверить тип файловой системы?

Ответы [ 5 ]

13 голосов
/ 17 ноября 2008

stat -f -c %T <filename> должен делать то, что вы хотите. Вы также можете захотеть -l

2 голосов
/ 17 ноября 2008

Если вы используете df для каталога, чтобы получить информацию только об устройстве, в котором он находится, например, для текущего каталога:

df .

Затем вы можете просто проанализировать вывод, например,

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

чтобы получить имя устройства.

2 голосов
/ 17 ноября 2008

Вы можете использовать «df -T», чтобы получить тип файловой системы для каталога, или использовать опцию -t, чтобы ограничить отчеты определенными типами (например, nfs), и если он возвращается с «без обработки файловых систем», это не один из тех, кого вы ищете.

df -T $dir | tail -1 | awk '{print $2;}'
1 голос
/ 24 августа 2010

Я проверил следующее на Солярисе 7,8,9 и 10, и оно кажется надежным

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

Должен дать вам тип fs, а не пытаться найти "host: path" в вашей точке монтирования.

0 голосов
/ 17 ноября 2008

В некоторых системах номер устройства является отрицательным для файлов NFS. Таким образом,

print "remote" if (stat($filename))[0] < 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...