Bash
僅將文件數保存在特定文件夾中
我正在使用此腳本來保存主文件夾中的文件數量,但它也計算該主文件夾中的子文件夾。
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
使用 ? 問號*(包括\n
ewlines)*,並/
為每個目錄列表附加一個。這樣,
-c
對於目前目錄中的簡單數量的非點文件,您可以執行以下操作:ls -1pq | grep -c -v /
整個過程不僅可能比
find
本來要快,而且也是 POSIXly 完成的。