Have Find print just the filenames, not full paths

倖福魔咒の 提交于 2019-11-27 20:29:27

问题


I'm using the find command in a ksh script, and I'm trying to retrieve just the filenames, rather than the full path. As in, I want it to return text.exe, not //severname/dir1/dir2/text.exe.

How would I go about getting that? To clarify, i know the directory the files are in, i am just grabbing the ones created befoee a ceetain date, so the pathname doesnt matter.


回答1:


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.




回答2:


If you're using GNU find, then

find path -printf "%f\n"

will just print the file name and exclude the path.




回答3:


find ... -exec basename {} \; 

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




回答4:


Here's another answer.

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



回答5:


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

find ... -printf '%f\n'

Update: Oops... this was already covered in the answer by @glenn-jackman which I somehow missed to see.



来源:https://stackoverflow.com/questions/9202495/have-find-print-just-the-filenames-not-full-paths

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