dirname è un programma per computer standard su Unix e sistemi operativi Unix-like. Quando a dirname viene passato un percorso (pathname), tale comando cancellerà qualsiasi suffisso che inizia con l'ultimo carattere slash ('/') e restituirà il risultato. Il comando dirname è descritto nella Single UNIX Specification ed è utilizzato principalmente negli shell script.
Storia
Sintassi
Esempi
dirname recupererà il nome del percorso della directory da un nome del percorso ignorando eventuali barre finali:
$ dirname /home/marco/documenti/base.wiki /home/marco/documenti $ dirname /home/marco/documenti/. /home/marco/documenti $ dirname /home/marco/documenti/ /home/marco $ dirname base.wiki . $ dirname / /
Prestazioni
Poiché dirname accetta un solo operando, il suo utilizzo all'interno del ciclo interno degli shell script può essere dannoso per le prestazioni. Si consideri il seguente codice:
while read file; do dirname "$file" done < dell'input
L'estratto qui sopra causerebbe invocazioni di processo separate per ogni riga di input. Per questo motivo, in genere viene utilizzata invece la shell substitution:
echo "${file%/*}";
oppure nel caso fosse necessario gestire anche i percorsi relativi:
if [ -n "${file##*/*}" ]; then echo "." else echo "${file%/*}"; fi
Si noti che questi frammenti di codice gestiscono le barre finali in modo diverso da dirname.
Idee erronee
Si potrebbe pensare che i percorsi che terminano con una barra finale siano una directory. Ma in realtà, la barra finale rappresenta tutti i file all'interno della directory.
/home/marco/documenti/.
Il modo corretto per rappresentare un percorso come una directory è quello di farlo terminare con una barra e un punto.
