Zsh: Get Filename or Extension from Path


2018-01-03 · 1 min read

Get the filename from a path using :t modifier. This removes all leading pathname components, leaving just the tail. It works like basename.

#!/bin/zsh
 
fullpath="/etc/nginx/nginx.conf"
filename=$fullpath:t
echo $filename
nginx.conf

Or, get the path without the filename using :h modifier

#!/bin/zsh
 
fullpath="/etc/nginx/nginx.conf"
filename=$fullpath:h
echo $filename
/etc/nginx

Get the filename without the extension by combining two path modifiers :t and :r

#!/bin/zsh
 
fullpath="/etc/nginx/nginx.conf"
filename=$fullpath:t:r
echo $filename
nginx

Get just the extension by combining :t and :e path modifiers

#!/bin/zsh
 
fullpath="/etc/nginx/nginx.conf"
ext=$fullpath:t:e
echo $ext
conf