cómo verificar el formato de un sistema de archivos

11

Me gustaría comprobar, en un script bash, qué tipo de sistema de archivos es un directorio.

La idea es algo como

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
Sueño
fuente
¿Quieres el punto de montaje o el tipo de sistema de archivos? ¿Cuál sería su salida deseada?
terdon

Respuestas:

11

Uso df. Puede pasarle una ruta y le dará la información del sistema de archivos para esa ruta. Si necesita el tipo de sistema de archivos, use el -Tinterruptor, así:

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

Para extraer el tipo de sistema de archivos, puede analizarlo (use el -Pinterruptor para evitar dfromper líneas si la parte del dispositivo es demasiado larga):

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

Entonces puede usar ese valor en una ifconstrucción como esta:

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

Tenga en cuenta que la columna del dispositivo puede contener espacios (pero es raro), en cuyo caso el análisis fallará.

marinus
fuente
12

En un sistema con el comando GNU stat instalado (como ocurre con cualquier distribución estándar de Linux), puede obtener el tipo fs para un archivo determinado sin requerir ningún análisis mediante el statcomando:

stat -f -c %T filename

-fle indica statque proporcione información sobre el sistema de archivos en lugar del archivo, y -c %Testablece el formato de salida para incluir solo el tipo de sistema de archivos legible por humanos ( %T).

Entonces podrías usar eso (en bash) como:

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

man stat Proporcionará más información.

rici
fuente
3

Con findmnt(parte de util-linux):

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

Al usar la opción

-T, - ruta de destino
si la ruta no es un archivo o directorio de punto de montaje, findmntverifica los elementos de la ruta en orden inverso para obtener el punto de montaje. Las otras dos opciones suprimen la línea del encabezado: -n, --noheadingy seleccionan las columnas a enumerar:-o, --output


dffrom coreutilstiene una opción similar --output=para imprimir solo ciertos campos, como fstypepor ejemplo:

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

Sin embargo, no hay ninguna opción para eliminar el encabezado, por lo que tendrá que canalizar la salida a, por ejemplo, | sed 1d

don_crissti
fuente
Una findmntherramienta linda , incluso con salida TUI de dibujo lineal. ¡Gracias!
Incnis Mrsi