Ответ 1
Используйте команду basename, чтобы извлечь имя файла из пути:
[/tmp]$ export fspec=/exp/home1/abc.txt
[/tmp]$ fname=`basename $fspec`
[/tmp]$ echo $fname
abc.txt
У меня есть переменная, которая имеет путь к каталогу вместе с именем файла. Я хочу извлечь только имя файла из пути каталога Unix и сохранить его в переменной.
fspec="/exp/home1/abc.txt"
Используйте команду basename, чтобы извлечь имя файла из пути:
[/tmp]$ export fspec=/exp/home1/abc.txt
[/tmp]$ fname=`basename $fspec`
[/tmp]$ echo $fname
abc.txt
bash, чтобы получить имя файла
fspec="/exp/home1/abc.txt"
filename="${fspec##*/}" # get filename
dirname="${fspec%/*}" # get directory/path name
другие способы
AWK
$ echo $fspec | awk -F"/" '{print $NF}'
abc.txt
Сед
$ echo $fspec | sed 's/.*\///'
abc.txt
с использованием IFS
$ IFS="/"
$ set -- $fspec
$ eval echo \${${#@}}
abc.txt
Вы можете просто сделать:
base=$(basename "$fspec")
bash:
fspec="/exp/home1/abc.txt"
fname="${fspec##*/}"
dirname "/usr/home/theconjuring/music/song.mp3"
будет давать /usr/home/theconjuring/music
.
echo $fspec | tr "/" "\n"|tail -1
Используя bash "here string":
$ fspec="/exp/home1/abc.txt"
$ tr "/" "\n" <<< $fspec | tail -1
abc.txt
$ filename=$(tr "/" "\n" <<< $fspec | tail -1)
$ echo $filename
abc.txt