我在ksh脚本中使用find命令,而我正在尝试仅检索文件名,而不是完整路径。在,我希望它返回text.exe,而不是//severname/dir1/dir2/text.exe。
我将如何得到它?为了澄清,我知道文件所在的目录,我只是抓住了那个创建的日期,所以路径名无所谓。
答案 0 :(得分:65)
如果你正在使用GNU find,那么
find path -printf "%f\n"
将只打印文件名并排除路径。
答案 1 :(得分:16)
find ... -exec basename {} \;
也可以做到这一点..但正如@Kent所问,你为什么要这个呢?
答案 2 :(得分:9)
你可以用:
find ..... |sed 's#.*/##'
然而它真的有意义吗?如果有两个文件具有相同的文件名但位于不同的目录中,你如何区分它们?
e.g。
you are in /foo
/foo/a.txt
/foo/bar/a.txt
修改强>
编辑答案以获得更好的文字格式。
正如您在评论中所述,所以您想要
这可以一次完成:
find ...|xargs tar -czf /path/to/your/target/a.gz
这将找到文件,为目标目录制作tar(a.gz)。
答案 3 :(得分:3)
这是另一个答案。
find | awk -F/ '{print $NF}'
答案 4 :(得分:1)
GNU find使用-printf
本机支持此操作,因此您所需要做的就是
find ... -printf '%f\n'
更新:糟糕...这已经被@ glenn-jackman的答案所涵盖,我莫名其妙地没看到。