Second Argument to basename
— Kaushal ModiIt is quite common knowledge that the basename
command is used to get just the file name without its full path.
> basename /home/$USER/file.txt
file.txt
But what wasn’t common knowledge, at least to me, was that basename
also accepts a second argument ..
That argument is used to specify the trailing string to be removed from first argument.
From man basename
, we get
DESCRIPTION
Print NAME with any leading directory components removed. If
specified, also remove a trailing SUFFIX.
EXAMPLES
basename /usr/bin/sort
Output "sort".
basename include/stdio.h .h
Output "stdio".
In other words, with the second argument set to the file’s extension, basename
returns the file name without the full path and without the extension.
> basename /home/$USER/file.txt .txt
file
I came across this feature of basename
when I wanted to create this tcsh alias:
# Usage: md2 html file.md # Converts file.md (markdown) to file.html
# md2 pdf file.md # Converts file.md (markdown) to file.pdf
# md2 docx file.md # Converts file.md (markdown) to file.docx (Word)
alias md2 'pandoc \!:3* \!:2 -o `basename \!:2 .md`.\!:1'