我在ksh脚本中使用find命令,我试图只检索文件名,而不是完整路径.在,我希望它返回text.exe,而不是//severname/dir1/dir2/text.exe.
我该怎么做呢?为了澄清,我知道文件所在的目录,我只是抓住了beetoe date的创建者,所以路径名无所谓.
gle*_*man 73
如果你正在使用GNU find,那么
find path -printf "%f\n"
Run Code Online (Sandbox Code Playgroud)
将只打印文件名并排除路径.
evi*_*tto 17
find ... -exec basename {} \;
Run Code Online (Sandbox Code Playgroud)
也会做的伎俩..但正如@Kent所问,你为什么要这样?
Ken*_*ent 14
你可以用:
find ..... |sed 's#.*/##'
Run Code Online (Sandbox Code Playgroud)
但它真的有意义吗?如果有两个文件具有相同的文件名但位于不同的目录中,你如何区分它们?
例如
you are in /foo
/foo/a.txt
/foo/bar/a.txt
Run Code Online (Sandbox Code Playgroud)
编辑
编辑答案以获得更好的文本格式.
正如您在评论中所述,所以您想要
这可以一次完成:
find ...|xargs tar -czf /path/to/your/target/a.gz
Run Code Online (Sandbox Code Playgroud)
这将找到文件,为你的目标目录制作一个tar(a.gz).
GNU find 本身就支持这种使用方式,-printf因此您需要做的就是
find ... -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)
更新:哎呀……@glenn-jackman 的答案中已经涵盖了这一点,我不知何故错过了。