En mi script necesito el directorio del archivo con el que estoy trabajando. Por ejemplo, el archivo = "cosas / copia de seguridad / archivo.zip" . Necesito una forma de obtener la cadena " cosas / copia de seguridad / " de la variable $file
.
123
dirname $file
dirname "$file"
, más bien. Sin las comillas, esto se comportará mal si el nombre del archivo o directorio tiene espacios.saldrá
que es lo contrario de
basename
:saldría
fuente
Usar lo
${file%/*}
sugerido por Urvin / LuFFy es técnicamente mejor ya que no dependerá de un comando externo. Para obtener el nombre de base de la misma manera que podría hacerlo${file##*/}
. No es necesario utilizar un comando externo a menos que sea necesario.De esta manera, también sería totalmente compatible con POSIX. ¡Espero eso ayude! :-)
fuente
dirname
tiene una ventaja sobre el enfoque integrado (más eficiente), y es si no está seguro de que su camino esté completamente calificado para comenzar. Si tienefile=file.zip
,dirname "$file"
volverá.
, mientras${file%/*}
que volveráfile.zip
.case $file in */*) dir=${file%/*};; *) dir=.;; esac
sigue siendo POSIX-y y resuelve el problema.Para obtener
directorypath
defilepath
:fuente
Simplemente use
$ dirname /home/~username/stuff/backup/file.zip
Volverá
/home/~username/stuff/backup/
fuente