2009-09-30 140 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的拆分也一個接一個。