如何通过管道查找路径的基本名称

时间:2019-06-09 03:50:52

标签: bash shell find basename

这不起作用:

find "$all_locks" -mindepth 1 -maxdepth 1 -type d | basename

显然,基名无法从stdin中读取-在任何情况下,基名都至少需要一个参数。

3 个答案:

答案 0 :(得分:2)

由于mindepthmaxdepth是GNU扩展,因此使用printf之类的其他扩展名不会降低其可移植性。

find "$all_locks" -mindepth 1 -maxdepth 1 -type d -printf '%f\n'

答案 1 :(得分:1)

这里的问题是basename不接受stdin,因此未命名的管道可能没有用。我想稍微修改一下您的命令。让我知道它是否达到目的。

find -mindepth 1 -maxdepth 1 -type d -exec basename {}  \;

注意:信誉不足,无法发表评论,因此请在此处发布。

答案 2 :(得分:1)

要将命令应用于管道操作的每个结果,xargs是您的朋友。就像我在手册页上所说的那样...

  

xargs从标准输入中读取项目,并以空格分隔(   可以用双引号或单引号或反斜杠保护)或   换行,并执行一个或多个命令(默认为/ bin / echo)   带有任何初始参数的时间,后跟从标准读取的项目   输入。

在这种情况下,这意味着它将从您的Users命令中获取每个结果,并运行find ad nauseum,直到find完成其搜索为止。我相信您想要的看起来会像这样:

basename <find result>