我尝试使用 find 从搜索结果中仅获取名称,但它总是包含目录。如何使用 find 仅打印名称(或分配给变量)
find trunk/messages/ -name "*.po" -printf '%f\n'
类似的命令将其分配给变量,例如“资源”,以便稍后使用它。
编辑:如果可能的话,只显示名称而不显示扩展名。
答案1
使用find trunk/messages/ -name "*.po" -exec basename {} .po \;
示例和说明:
创建一些测试文件:
$ touch test1.po
$ touch test2.po
$ find . -name "*.po" -print
./test1.po
./test2.po
好的,文件找到,包括路径。
对于每个结果执行basename
,并删除名称中的 .po 部分
$ find . -name "*.po" -exec basename \{} .po \;
test1
test2
答案2
您可以使用-execdir
不带路径的参数打印文件,例如:
find . -name "*.po" -execdir echo {} ';'
没有扩展名的文件:
find . -name "*.txt" -execdir basename {} .po ';'
注意:由于它不是 POSIX,BSDfind
将打印干净的文件名,但是使用 GNUfind
将打印额外的./
。
答案3
根据我在这里找到的命令:http://www.unixcl.com/2009/08/remove-path-from-find-result-in-bash.html
您可以使用以下方法执行此操作sed
(对我来说,这种方法比该basename
方法执行得更快):
find trunk/messages/ -name "*.po" | sed 's!.*/!!' | sed 's!.po!!'