簡體   English   中英

Bash計算目錄,子目錄和文件

[英]Bash counting directories, subdirectories and files

我查看了堆棧溢出時的所有其他答案,並且整日都花在了上面。

我要做的第一件事是計算指定目錄中的所有目錄/子目錄,理想情況下應該非常簡單。 首先,我要求用戶輸入目錄名稱。

#Choosing directory
echo "Please type in directory cd: [directory name]"
read dirname
cd $dirname
echo "Entering directory" 

一切正常。 接下來,我嘗試了兩種方法來查找文件夾數。

我正在測試的目錄中總共有6個目錄/子目錄和3個文件。

第一種方法是單獨使用'find'和'wc',但是這會輸出一個字符串“ 7”,前面帶有空格,我不想計算我們選擇的目錄。 如果將其設置為變量,我也無法從該值中減去一個,因為它是一個在前面帶有空格的字符串。

direnum=`find . -type d | wc -l`
echo "$direnum"

(結果= 7)(需要結果= 6)

第二種方法是使用“ for循環”以及“ find”和“ wc”。 此方法可以正常工作,但是在有許多文件時非常慢。

i=0
for d in `find . -type d` 
do
   i=`expr $i + 1`
done

#dont include the directory currently in
i=`expr $i - 1`

#output results
echo "Directories: $i"

(結果= 6)(需要結果= 6)

我也用文件嘗試了這兩種方法,但是它沒有輸出正確的數字。 我在目錄中有3個文件,第一種方法輸出5 ,第二種方法輸出結果8,不確定如何工作。

文件計數的第一種方法

#Check number of files in directory
filenum=`find . -type f | wc -l`
echo "$filenum"

再次導致字符串“ 5”,前面有很多空格。

(結果= 5)(需要結果= 3)

文件計數的第二種方法

#Check number of files in directory
j=0
for f in `find . -type f` 
do
    j=`expr $j + 1`
done

(結果= 8)(要求結果= 3)

如果有人可以讓我走上正確的道路,將不勝感激,我不希望有完整的解決方案,理想情況下,我想獨自解決問題,但我可能做錯了事。

使用最小深度

find . -mindepth 1 -type d | wc -l

除了我的評論:

declare -i direnum
direnum=$(find . -type d|wc -l)
(( direnum-- ))
echo "$direnum"

順便說一句,請注意,我使用的是$( ... )而不是反引號,反引號被認為是不好的做法且已過時。

命令“ tree”從相對位置計數文件和文件夾

tree /path

將為您提供信息。 您是否需要在其他腳本中使用該信息?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM