让Find只打印文件名,而不是完整路径

时间:2012-02-08 22:27:42

标签: shell ksh

我在ksh脚本中使用find命令,而我正在尝试仅检索文件名,而不是完整路径。在,我希望它返回text.exe,而不是//severname/dir1/dir2/text.exe。

我将如何得到它?为了澄清,我知道文件所在的目录,我只是抓住了那个创建的日期,所以路径名无所谓。

5 个答案:

答案 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

修改

编辑答案以获得更好的文字格式。

正如您在评论中所述,所以您想要

  1. 找到一些文件,
  2. 将它们复制到目录,
  3. 将它们gzip到档案中说a.gz
  4. 仅在步骤2成功时删除复制的文件
  5. 这可以一次完成:

    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的答案所涵盖,我莫名其妙地没看到。