排除 .和 .. 來自 find 和 ls 的結果

排除 .和 .. 來自 find 和 ls 的結果

有什麼辦法可以防止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)

zshglob 永遠不會包含.,甚至在啟用..時也不會包含(例如使用globbing 限定符))。dotglob(D)

為了避免在沒有檔案時出現錯誤訊息,請新增Nglobbing 限定符:

count *(ND)

如果沒有匹配,這會導致 glob 擴展為空(沒有參數,不是空參數)。

請注意,由於換行符號與檔案名稱中的任何字元一樣有效,因此管道輸出lsfindtowc -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
...

相關內容