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
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
Respuestas:
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á.
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.
Con findmnt(parte de util-linux):
findmnt -no fstype -T /path/to/file
Al usar la opción
-T, - ruta de destinosi 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
findmntherramienta linda , incluso con salida TUI de dibujo lineal. ¡Gracias!