2009-09-30 357 views
2

如何从路径中提取文件名列表;我有一个文件列表。我使用的是csh shell,并安装了awk,sed和perl。提取文件名从在csh shell路径 - 从文件

/dfgfd/dfgdfg /文件名

应该给我

我试过基本名称:

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l pattern | xargs basename 

,它给了我下面的错误:

基名:参数太少 尝试`basename - 帮助'获取更多信息。

THX

回答

9

标准程序basename你想要做什么:

$ basename /dfgfd/dfgdfg/filename 
filename 
+0

我的问题是略有不同,基本名称将无法正常工作。检查编辑的问题。 – vehomzzz 2009-09-30 15:01:37

+2

'basename'一次只能用于一个文件名。用'xargs -n1 basename'替换最后一部分。 – Thomas 2009-09-30 15:08:53

+0

也可以尝试'-r',避免运行不带参数的一个'basename'如果没有匹配。 – ephemient 2009-09-30 15:42:27

1

这种解决办法的工作对我来说。你说你有perl,所以这应该运行。它将所有非空格文本替换为最后/不加任何内容(有效地删除它)。

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l pattern | perl -pi -e "s/\S+\///g" 
0

好吧,我发现使用AWK一个很好的解决方案:

find $PROJECT_DIR -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l PATTERN | awk -F "/" '{print $NF}' 
0
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' | xargs grep -l pattern 
| xargs -n1 basename 

试试这个!

为基名accepet单一路径参数作为参数,所以我们强迫xargs的拆分也一个接一个。