Have Find print just the filenames, not full paths Have Find print just the filenames, not full paths shell shell

Have Find print just the filenames, not full paths


If you're using GNU find, then

find path -printf "%f\n"

will just print the file name and exclude the path.


find ... -exec basename {} \; 

will also do the trick .. but as @Kent asks, why do you want this?


you can do it with:

find ..... |sed 's#.*/##'

however does it really make sense? if there are two files with same filename but located in different directories, how can you distinguish them?

e.g.

you are in /foo/foo/a.txt/foo/bar/a.txt

EDIT

edit the answer to gain some better text formatting.

As you described in comment, so you want to

  1. find some files,
  2. copy them to a dir,
  3. gzip them to an archive say a.gz
  4. remove copied files only if step 2 was successful

This could be done in one shot:

find ...|xargs tar -czf /path/to/your/target/a.gz 

this will find files, make a tar (a.gz) to your target dir.