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 $filedirname "$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
dirnametiene 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=.;; esacsigue siendo POSIX-y y resuelve el problema.Para obtener
directorypathdefilepath:fuente
Simplemente use
$ dirname /home/~username/stuff/backup/file.zipVolverá
/home/~username/stuff/backup/fuente