No meu script, preciso do diretório do arquivo com o qual estou trabalhando. Por exemplo, o arquivo = "stuff / backup / file.zip" . Eu preciso de uma maneira de obter a string " stuff / backup / " a partir da variável $file
.
123
dirname $file
é o que você está procurando
dirname $file
dirname "$file"
, em vez. Sem as aspas, isso se comportará mal se o nome do arquivo ou diretório tiver espaços.irá produzir
que é o oposto de
basename
:produziria
fonte
Usar
${file%/*}
como sugerido por Urvin / LuFFy é tecnicamente melhor, pois você não dependerá de um comando externo. Para obter o nome da base da mesma maneira que você poderia fazer${file##*/}
. Não é necessário usar um comando externo, a menos que você precise.Também seria totalmente compatível com POSIX dessa maneira. Espero que ajude! :-)
fonte
dirname
há uma vantagem sobre a abordagem interna (mais eficiente), e é se você não tiver certeza de que seu caminho está totalmente qualificado para começar. Se você tiverfile=file.zip
,dirname "$file"
retornará.
, enquanto${file%/*}
retornaráfile.zip
.case $file in */*) dir=${file%/*};; *) dir=.;; esac
ainda está no POSIX-y e soluciona o problema.Para obter
directorypath
dofilepath
:fonte
Basta usar
$ dirname /home/~username/stuff/backup/file.zip
Vai voltar
/home/~username/stuff/backup/
fonte