我正試圖計算目錄中文件的總行數。要做到這一點,我正在嘗試使用find和wc的組合。但是,當我運行find . -exec wc -l {}\;
時,我收到錯誤find: missing argument to -exec
。我看不到任何明顯的問題,有什麼想法?查找-exec不能識別參數
0
A
回答
4
你只需要一個空間{}
和\;
之間
find . -exec wc -l {} \;
需要注意的是,如果有從當前位置的任何子目錄,wc
會爲他們每個人,看起來像一個錯誤信息:
wc: ./subdir: Is a directory
爲了避免這樣的問題,你可能想告訴find
限制搜索到的文件:
find . -type f -exec wc -l {} \;
另一個注意:使用-exec
選項的好主意。太多時候,人們管命令一起思維來得到相同的結果,例如這裏將是:
find . -type f | xargs wc -l
在這樣的管道命令的問題是,它打破,如果任何文件中有空格在裏面。例如,如果文件名是「a b」,則wc
將分別接收「a」和「b」,並且顯然會得到2個錯誤消息:a: no such file
和b: no such file
。
除非您知道您的文件名中沒有空格(或不可打印的字符),否則您需要告知所有您一起管道的工具使用NULL字符(\ 0)作爲分隔符而不是空格。所以前面的命令將變成:
find . -type f -print0 | xargs -0 wc -l
+0
而且,更好的是,POSIX規定用'+'代替'';'(或'\;')的作用與使用'xargs'幾乎一樣。 'find'將一堆文件名分組在一起,每N個文件名(N不是可控數量,但取決於參數列表的最大長度和文件名的長度)運行一次命令。 – 2014-10-06 20:28:33
1
4.0或更高版本的bash
版本,你不需要你find
命令不惜一切:
shopt -s globstar
wc -l **/*
有跳過目錄,沒有簡單的方法,其作爲Gui Rava指出你可能想要這樣做,除非你可以通過名字來區分文件和目錄。例如,可能目錄中永遠不會有.
的名稱,而所有文件至少有一個擴展名:
wc -l **/*.*
相關問題
- 1. N1QL查詢不識別參數
- 2. 爲什麼prolog不能識別查詢中的參數?
- 3. MSDeploy setParamFile不識別參數
- 4. FireDAC無法識別查詢參數
- 5. Excel不能識別C#函數的DateTime參數
- 6. Python - 使用參數不能識別的函數創建
- 7. 查找命令路徑變量查找不識別空格
- 8. Rails加入收集不識別參數
- 9. 函數不能識別數組值
- 10. Python不能識別我的所有命令行參數
- 11. Chef-jenkins插件不能識別jenkins參數
- 12. Asp.Net 1 - > Asp.Net 2升級 - machine.config中 - 不能識別的參數
- 13. 爲什麼這個WCF服務不能識別UriTemplate參數?
- 14. exec PHP不傳遞參數
- 15. 雄辯firstOrNew()查詢不識別傳遞給它的參數
- 16. 找到:缺少參數到-exec
- 17. QR碼不能識別
- 18. JavaScript不識別功能
- 19. 硒不能識別幀
- 20. mex不能識別內聯
- 21. 明顯不能識別html
- 22. 日食不能識別包
- 23. 硒不能識別憑據
- 24. SimpleDateFormatter不能識別月
- 25. PostgreSQL函數子查詢中不能識別的變量?
- 26. 如何查找基站識別碼(BSIC)
- 27. 標識符沒有找到,即使參數依賴查找
- 28. php notContainedIn無法識別數組參數
- 29. Grub能不能識別isohybrid圖像
- 30. 命令行查找,sed,exec
您錯過了一個空格:'find。 -exec wc -l {} \;'('\;'前面的空格)。 – 2014-10-06 17:20:52
我不是一個聰明的人 – ragingSloth 2014-10-06 17:22:09