Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How can I separate the path and file elements in a bash loop like this?

for file in `find /my/path -name "*.ext"`
do
    #(path,onlyfile) = separate_path_and_file $file
    #dosomethingwith $onlyfile
done
share|improve this question
up vote 4 down vote accepted

You can't. But you can do them separately.

$ foo=/usr/local/bin/bar
$ echo "${foo##*/}"
bar
$ echo "${foo%/*}"
/usr/local/bin
share|improve this answer
1  
Beautiful, thanks very much. – 719016 Jul 2 '12 at 8:57

I would suggest dirname and basename:

for file in `find /my/path -name "*.ext"`
do
    path="$(dirname $file)"
    onlyfile="$(basename $file)"
    # ...
done
share|improve this answer
    
This is much more readable than the accepted answer. – itsafire Sep 2 '15 at 9:55

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .