How could I strip the paths from a list of file names on standard input? I basically need something like basename
that iterates over standard input.
Asked
Active
Viewed 232 times
0
3 Answers
1
while read path; do basename "$path" ; done
Simple loop.

Mihir Luthra
- 6,059
- 3
- 14
- 39
-
I turned that into a function that works perfectly. function basename_pipe() { while read path; do basename "$path" ; done } – Aug 08 '19 at 14:58
0
Try xargs basename -a
. It'll run faster than a simple loop as basename
won't be run for each filename.
$ printf "%s\n" foo/bar bar/baz | xargs basename -a
bar
baz
Note that the above won't correctly handle filenames with spaces. You'll want to use the -0
option to xargs
and ensure the input is NUL terminated.
$ printf "%s\0" 'foo/foo bar' bar/baz | xargs -0 basename -a
foo bar
baz

Jon
- 3,573
- 2
- 17
- 24
0
According to this answer
If your filename is in the form of a variable such as $fullpathname
nopathfile="${fullpathname##*/}"
It's in the bash manpage at the section called "Parameter Expansion"

ThanhPhanLe
- 1,315
- 3
- 14
- 25

oksage
- 33
- 5