2015-06-22 35 views
0

我試圖從給定的目錄中找到所有C#接口。我試圖做這個命令:對Bash中的字符串列表執行命令

find . -type f | xargs basename | grep ^I 

basename因爲我送它一個字符串列表是給回一個錯誤,而不是字符串本身。我如何獲得basename的輸出在通過它傳輸的所有字符串上執行?

+1

怎麼樣'... | xargs -i basename「{}」| ...'? – higuaro

+0

@higuaro謝謝! (順便提一下,你可能想把它作爲答案。) –

+0

'echo I *'有什麼問題嗎? (也許你真的需要一個遞歸列表,或者你有名字以'I'開始的文件夾?) – rici

回答

2

使用xargs這個你不需要。您可以使用:

find . -type f -name 'I*' -exec basename '{}' ';' 

如果您正在使用GNU找到,你不需要任何basename

find . -type f -name 'I*' -printf %f\\n 

這裏,%f是GNU找到printf格式爲「文件名與所有但最後組件被移除「。還有許多其他可能的格式代碼;詳情請參閱man find

+0

不錯;與通過'xargs'管道相比,這些運行速度非常快。 –

+1

@JamesKo:第二個應該是最快的,如果你的發現支持它,因爲它不需要啓動任何新的過程。 – rici

1

使用xargs -i應該解決的問題:

find . -type f | xargs -i basename "{}" | grep ^I