Apenas cite seu caminho
basename "/isf/GCM/VPfig/Aas/AR/ClCo el Doma Republic/VMN CRTro.txt"
Aqui está um exemplo de caminho de arquivo:
/isf/GCM/VPfig/Aas/AR/ClCo el Doma Republic/VMN CRTro.txt
O que eu quero obter é o nome de base do arquivo:
VMN CRTro.txt
Então, tento o seguinte:
echo /isf/GCM/VPfig/Aas/AR/ClCo el Doma Republic/VMN CRTro.txt | sed s'/\// /g' | awk '{print $NF}'
CRTro.txt <-- not as expected
Ou
basename /isf/GCM/VPfig/Aas/AR/ClCo el Doma Republic/VMN CRTro.txt
basename: extra operand 'Doma'
Try 'basename --help' for more information. <-- basename cant handle spaces
Qual é a melhor maneira de obter o nome de base de um arquivo com espaços?
O núcleo da questão é a citação. Sem aspas, trata o nome do arquivo como vários argumentos para basename
.
Se o caminho é difícil, e não uma variável, então a resposta de rob é boa. Mas se isso faz parte de um script, onde uma variável está sendo usada, você tem duas boas soluções:
$ filepath="/isf/GCM/VPfig/Aas/AR/ClCo el Doma Republic/VMN CRTro.txt"
$ basename "$filepath"
VMN CRTro.txt
No entanto, basename
é um utilitário externo e não faz parte do bash. Existe uma solução alternativa incorporada no bash:
$ filepath="/isf/GCM/VPfig/Aas/AR/ClCo el Doma Republic/VMN CRTro.txt"
$ echo "${filepath##*/}"
VMN CRTro.txt
O ${filepath##*/}
diz ao bash para executar o glob */
, que corresponde a tantos caracteres quanto possível seguido por um /
e, em seguida, retirá-lo.
Ambas as respostas aqui são mais que suficientes - embora eu pessoalmente faça como Patrick sugere e use ${var##*/}
. Ainda assim, apenas por diversão:
IFS=/ ; set -f
set -- ${0+/isf/GCM/VPfig/Aas/AR/ClCo el Doma Republic/VMN CRTro.txt}
for p do i=$((i+1))
printf "arg#$i:\t%s\n" "${p:-/}"
done
echo now shift out...
shift $(($#-1))
printf 'arg#1:\t%s\n' "$1"
arg#1: /
arg#2: isf
arg#3: GCM
arg#4: VPfig
arg#5: Aas
arg#6: AR
arg#7: ClCo el Doma Republic
arg#8: VMN CRTro.txt
now shift out...
arg#1: VMN CRTro.txt
Você não precisa se preocupar com $IFS
comendo suas avaliações de variáveis se configurá-las corretamente. Você pode até usá-lo para sua vantagem.
Tags shell