как проверить формат файловой системы

11

Я хотел бы проверить в bash-скрипте, какой тип файловой системы является каталогом.

Идея что-то вроде

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
Dremor
источник
Вы хотите точку монтирования или тип файловой системы? Каким будет ваш желаемый результат?
Terdon

Ответы:

11

Использование df. Вы можете передать ему путь, и он даст вам информацию о файловой системе для этого пути. Если вам нужен тип файловой системы, используйте -Tпереключатель, например, так:

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

Чтобы извлечь тип файловой системы, вы можете проанализировать его (используйте -Pпереключатель, чтобы избежать dfразрывов строк, если часть устройства слишком длинная):

$ df -PT test | awk 'NR==2 {print $2}'
ext4

Таким образом, вы можете использовать это значение в ifконструкции следующим образом:

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

Помните, что столбец устройства может содержать пробелы (но это редко), в этом случае синтаксический анализ не удастся.

Мэринус
источник
12

В системе с установленной командой GNU stat (как и в любом стандартном дистрибутиве Linux) вы можете получить тип fs для данного файла без необходимости синтаксического анализа с помощью statкоманды:

stat -f -c %T filename

-fУказывает statпредоставить информацию о файловой системе вместо файла и -c %Tустанавливает выходной формат, включающий в себя только читаемый человеком тип файловой системы ( %T).

Таким образом, вы можете использовать это (в bash) как:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat предоставит больше информации.

RICi
источник
3

С findmnt(часть util-linux):

findmnt -no fstype -T /path/to/file

При использовании опции

-T, - целевой путь
если путь не является файлом или каталогом точки монтирования, findmntпроверяет элементы пути в обратном порядке, чтобы получить точку монтирования. Два других параметра подавляют строку заголовка: -n, --noheadingи выбирают столбцы, которые должны быть перечислены:-o, --output


dffrom coreutilsимеет аналогичную опцию --output=для печати только определенных полей, fstypeнапример:

df --output=fstype /path/to/file

однако нет возможности удалить заголовок, так что вам придется передать вывод | sed 1d

don_crissti
источник
Симпатичный findmntинструмент, даже с выводом TUI для рисования линий. Благодарность!
Incnis Mrsi