有什麼辦法可以防止find
並在其結果中ls -l
列出.
嗎?..
我從不關心在輸出中看到這個結果,它阻止我有效地透過管道輸出來wc -l
準確地計數。
如果重要的話,我正在工作zsh
。
答案1
對於ls
,使用-A
代替-a
。
從man ls
:
-A, --almost-all
do not list implied . and ..
答案2
和zsh
:
count() echo $#
count * # non-hidden files (all types)
count *(D) # files (all types)
count **/*(D) # files recursively (all types)
count **/*(D/) # directories only (recursively)
(zsh
glob 永遠不會包含.
,甚至在啟用..
時也不會包含(例如使用globbing 限定符))。dotglob
(D)
為了避免在沒有檔案時出現錯誤訊息,請新增N
globbing 限定符:
count *(ND)
如果沒有匹配,這會導致 glob 擴展為空(沒有參數,不是空參數)。
請注意,由於換行符號與檔案名稱中的任何字元一樣有效,因此管道輸出ls
或find
towc -l
是不正確的。
POSIXly,你可以計算/
字元而不是換行符:
find . ! -name . -prune -print | grep -c /
或遞歸地使用這個技巧:
find .//. ! -name . -prune -print | grep -c //
答案3
若要find
排除點目錄,您可以使用以下命令:
$ find . ! -path . -type d
例子
$ find . ! -path . -type d | head -5
./.vim_SO
./.vim_SO/bundle
./.vim_SO/bundle/vim-fugitive
./.vim_SO/bundle/vim-fugitive/plugin
./.vim_SO/bundle/vim-fugitive/doc
...