Я хотел бы проверить в bash-скрипте, какой тип файловой системы является каталогом.
Идея что-то вроде
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
Я хотел бы проверить в bash-скрипте, какой тип файловой системы является каталогом.
Идея что-то вроде
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
Ответы:
Использование 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
Помните, что столбец устройства может содержать пробелы (но это редко), в этом случае синтаксический анализ не удастся.
В системе с установленной командой 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
предоставит больше информации.
С findmnt
(часть util-linux
):
findmnt -no fstype -T /path/to/file
При использовании опции
-T, - целевой путьесли путь не является файлом или каталогом точки монтирования,
findmnt
проверяет элементы пути в обратном порядке, чтобы получить точку монтирования. Два других параметра подавляют строку заголовка: -n, --noheading
и выбирают столбцы, которые должны быть перечислены:-o, --output
df
from coreutils
имеет аналогичную опцию --output=
для печати только определенных полей, fstype
например:
df --output=fstype /path/to/file
однако нет возможности удалить заголовок, так что вам придется передать вывод | sed 1d
findmnt
инструмент, даже с выводом TUI для рисования линий. Благодарность!