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.
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
- find some files,
- copy them to a dir,
- gzip them to an archive say a.gz
- 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'
来源:https://stackoverflow.com/questions/9202495/have-find-print-just-the-filenames-not-full-paths