Risposte:
Usa df. Puoi passargli un percorso e ti darà le informazioni sul filesystem per quel percorso. Se hai bisogno del tipo di filesystem, usa l' -Topzione, in questo modo:
$ df -T test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda2 ext4 182634676 32337180 141020160 19% /home
Per estrarre il tipo di filesystem, puoi analizzarlo (usa l' -Pinterruttore per evitare di dfspezzare le linee se la parte del dispositivo è troppo lunga):
$ df -PT test | awk 'NR==2 {print $2}'
ext4
Quindi puoi usare quel valore in un ifcostrutto in questo modo:
if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
it is an ext4 filesystem
fi
Attenzione che la colonna del dispositivo può contenere spazi (ma è raro), nel qual caso l'analisi non riuscirà.
Su un sistema con il comando stat GNU installato (come con qualsiasi distribuzione Linux standard), è possibile ottenere il tipo fs per un dato file senza richiedere alcun analisi usando il statcomando:
stat -f -c %T filename
-findica statdi fornire informazioni sul file system anziché sul file e -c %Timposta il formato di output in modo che includa solo il tipo di file system leggibile ( %T).
Quindi potresti usarlo (in bash) come:
if [[ $(stat -f -c %T filename) == ext4 ]]; then
# ext4 specific command
fi
man stat fornirà ulteriori informazioni.
Con findmnt(parte di util-linux):
findmnt -no fstype -T /path/to/file
Quando si utilizza l'opzione
-T, --target pathse il percorso non è un file o una directory mountpoint,
findmntcontrolla gli elementi del percorso in ordine inverso per ottenere il mountpoint. Le altre due opzioni eliminano la riga di intestazione: -n, --noheadinge selezionano le colonne da elencare:-o, --output
dfda coreutilsha un'opzione simile --output=per stampare solo alcuni campi, come fstypead esempio:
df --output=fstype /path/to/file
non esiste alcuna opzione per rimuovere l'intestazione, quindi dovrai reindirizzare l'output ad es | sed 1d
findmntstrumento carino , anche con output TUI di disegno a tratteggio. Grazie!