如何只从没有路径的查找命令中获取名称

wak*_*eup 18 linux shell

我试图使用 find 从搜索结果中仅获取名称,但它也始终包含目录。如何使用 find 仅打印名称(或分配给变量)

find trunk/messages/ -name "*.po" -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)

一个类似的命令将它分配给一个变量,例如“资源”,以便稍后使用它。

编辑:如果可能的话,只有不包括扩展名的名称。

Hen*_*nes 27

find trunk/messages/ -name "*.po" -exec basename {} .po \;

示例和解释:

创建一些测试文件:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po
Run Code Online (Sandbox Code Playgroud)

好的,找到文件,包括路径。

对于每个结果执行basename,并去除名称的 .po 部分

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 7

您可以使用-execdir参数来打印没有路径的文件,例如:

find . -name "*.po" -execdir echo {} ';'
Run Code Online (Sandbox Code Playgroud)

没有扩展名的文件:

find . -name "*.txt" -execdir basename {} .po ';'
Run Code Online (Sandbox Code Playgroud)

注意:由于它不是 POSIX,BSDfind将打印干净的文件名,但是使用 GNUfind将打印额外的./.

请参阅:为什么 GNU find -execdir 命令的行为与 BSD find 不同?