Как я могу определить, находится ли файл в удаленной файловой системе с Perl?

StackOverflow https://stackoverflow.com/questions/296455

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top