Have Find print just the filenames, not full paths

。_饼干妹妹 提交于 2019-11-30 01:56:06
Kent

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.

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?

Here's another answer.

find | awk -F/ '{print $NF}'    

GNU find natively supports this using -printf so all that you need to do is

find ... -printf '%f\n'
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!