No Bash, se VAR="/home/me/mydir/file.c"
, como eu ganho "/home/me/mydir"
?
400
dirname
e basename
são as ferramentas que você procura para extrair componentes de caminho:
$ VAR=/home/me/mydir/file.c
$ DIR=$(dirname "${VAR}")
$ echo "${DIR}"
/home/me/mydir
$ basename "${VAR}"
file.c
Eles não são internos comandos Bash mas eles são parte do padrão POSIX (ver dirname
, basename
) e assim deve estar disponível na grande maioria dos sistemas que serão correndo Bash.
Para evitar dependência
basename
edirname
fonte
Em uma nota relacionada, se você tiver apenas o nome do arquivo ou o caminho relativo,
dirname
por si só não ajudará. Para mim, a resposta acabou sendoreadlink
.Você pode combinar os dois para obter apenas o diretório.
fonte
readlink -m "$fname"
para canonizar o nome dado recursivamenteSe você deseja que os arquivos de destino sejam um link simbólico, primeiro você pode verificá-lo e obter o arquivo original. A cláusula if abaixo pode ajudá-lo.
fonte
Eu estava brincando com isso e surgiu com uma alternativa.
A parte que eu gostei é que foi fácil estender o backup da árvore:
fonte
Aqui está um script que eu usei para aparar recursivamente. Substitua $ 1 pelo diretório que você deseja, é claro.
fonte
Primeiro, substituí o
/
espaço vazio (). Em seguida, apaguei todos os caracteres antes de qualquer espaço vazio (
). No final, removi o primeiro caractere que é espaço vazio (
).
fonte
onde você obtém o caminho completo com new_path =
$(dirname ${BASH_SOURCE[0]})
. Você altera o diretório atual comcd
new_path e depois executapwd
para obter o caminho completo para o diretório atual.fonte