我試圖從給定的目錄中找到所有C#接口。我試圖做這個命令:對Bash中的字符串列表執行命令
find . -type f | xargs basename | grep ^I
但basename
因爲我送它一個字符串列表是給回一個錯誤,而不是字符串本身。我如何獲得basename
的輸出在通過它傳輸的所有字符串上執行?
我試圖從給定的目錄中找到所有C#接口。我試圖做這個命令:對Bash中的字符串列表執行命令
find . -type f | xargs basename | grep ^I
但basename
因爲我送它一個字符串列表是給回一個錯誤,而不是字符串本身。我如何獲得basename
的輸出在通過它傳輸的所有字符串上執行?
使用xargs
這個你不需要。您可以使用:
find . -type f -name 'I*' -exec basename '{}' ';'
如果您正在使用GNU找到,你不需要任何basename
:
find . -type f -name 'I*' -printf %f\\n
這裏,%f
是GNU找到printf格式爲「文件名與所有但最後組件被移除「。還有許多其他可能的格式代碼;詳情請參閱man find
。
不錯;與通過'xargs'管道相比,這些運行速度非常快。 –
@JamesKo:第二個應該是最快的,如果你的發現支持它,因爲它不需要啓動任何新的過程。 – rici
使用xargs -i
應該解決的問題:
find . -type f | xargs -i basename "{}" | grep ^I
怎麼樣'... | xargs -i basename「{}」| ...'? – higuaro
@higuaro謝謝! (順便提一下,你可能想把它作爲答案。) –
'echo I *'有什麼問題嗎? (也許你真的需要一個遞歸列表,或者你有名字以'I'開始的文件夾?) – rici