Как я могу определить, находится ли файл в удаленной файловой системе с Perl?
-
08-07-2019 - |
Вопрос
Существует ли быстрый и грязный способ программно, в сценарии оболочки или в Perl, указать, находится ли путь в удаленной файловой системе (nfs или подобной) или в локальной? Или это единственный способ выполнить синтаксический анализ / etc / fstab и проверить тип файловой системы?
Решение
stat -f -c %T <filename>
должен делать то, что вы хотите. Вы также можете захотеть -l
Другие советы
Вы можете использовать " df -T " чтобы получить тип файловой системы для каталога или использовать опцию -t, чтобы ограничить отчеты определенными типами (например, nfs), и если он возвращается с " ни одна файловая система не обработана ", то это не один из тех, что вы ищете.
df -T $dir | tail -1 | awk '{print $2;}'
Если вы используете df
в каталоге, чтобы получить информацию только об устройстве, в котором он находится, например, для текущего каталога:
df .
Затем вы можете просто проанализировать вывод, например.
df . | tail -1 | awk '{print $1}'
чтобы получить имя устройства.
Я проверил следующее на Solaris7,8,9 & amp; 10 и кажется надежным
/bin/df -g <filename> | tail -2 | head -1 | awk '{print $1}'
Должен дать вам тип fs, а не пытаться найти соответствие для " host: path " в вашей точке монтирования.
В некоторых системах номер устройства является отрицательным для файлов NFS. Таким образом, р>
print "remote" if (stat($filename))[0] < 0