Bash

僅將文件數保存在特定文件夾中

  • March 16, 2015

我正在使用此腳本來保存主文件夾中的文件數量,但它也計算該主文件夾中的子文件夾。 nfiles=$(ls -1 /home/userA/mainfolder | wc -l)有什麼建議可以修改它以僅包含文件而不是文件夾?

而不是解析ls,您可以使用find

find . -maxdepth 1 -type f ! -name ".*" | wc -l

-type f這將在目前目錄 ( ) 中找到所有文件 ( ),.但以 . 開頭的文件除外。( ! -name ".*") 並將結果傳遞wc給以計算行數。

要將其用作腳本中的變數:

nfiles=$(find . -maxdepth 1 -type f ! -name ".*" | wc -l)

不要find用於這個。

除了需要不可移植的 GNU 擴展來使其工作之外,它還需要stat()它搜尋的每個文件。ls,另一方面,可以簡單地-1每行列出目前目錄的目錄,同時-q使用 ? 問號*(包括\newlines)*,並/為每個目錄列表附加一個。

這樣,-c對於目前目錄中的簡單數量的非點文件,您可以執行以下操作:

ls -1pq | grep -c -v /

整個過程不僅可能比find本來要快,而且也是 POSIXly 完成的。

引用自:https://unix.stackexchange.com/questions/190389