所以我知道我將如何計算目錄中的文件數 - 我會使用for filename in *
循環,然後測試文件名以符合我的目的,但我無法計算出如何循環訪問目錄,然後統計其中有多少(子)目錄。計算一個目錄的內容
任何人都可以指向正確的方向嗎?
所以我知道我將如何計算目錄中的文件數 - 我會使用for filename in *
循環,然後測試文件名以符合我的目的,但我無法計算出如何循環訪問目錄,然後統計其中有多少(子)目錄。計算一個目錄的內容
任何人都可以指向正確的方向嗎?
您可以使用-d
來測試其目錄。
您可以使用發現:find . -mindepth 1 -maxdepth 1 -type d
((n=0))
for fn in *
do
[[ -d "${fn}" ]] && ((n=1+${n}))
done
保留一個計數器,只增加它的目錄...
那麼'對於fn來說,''循環過目錄的名字呢? – 2012-08-10 20:57:48
此外,不要顯示太多我的新手,額外的括號和遊輪怎麼樣? – 2012-08-10 20:59:35
是的,'*'匹配當前目錄中的所有內容(除了以'.'開頭的東西外)。雙方括號大致相當於'test'或'['的殼內版本,因此效率更高。雙括號用於標記數學表達式並對其進行評估。閱讀'man bash'瞭解更多信息... – twalberg 2012-08-10 21:14:41
你到底想幹什麼?看看wc
命令。特別是wc -l
,它對輸出中的行數進行計數。您可以使用一組生成輸出的命令,然後將其傳送到wc -l
。小心將文件頭和頁腳添加到文件中的命令(如ls -l
)。
下面是一些例子:
這算不以.
開頭的文件和目錄:
$ ls | wc -l
它與您的for循環,你在你的問題了。
這將計算所有文件和目錄,包括那些隱藏的個。請注意0而不是ls -a
。第一個不會列出.
和..
作爲文件,而第二個會:
$ ls -A | wc -l
這將會在計數整個目錄樹中的所有文件和目錄
$ find . | wc -l
這隻會算在目錄整個目錄樹
$ find . -type d| wc -l
這將算在整個目錄樹中的所有文件
個$ find . -type f | wc -l
LS - 這會限制你的目錄的當前目錄
$ find . -mindepth 1 -maxdepth 1 -type d | wc -l
的數量,你可以用它來把它分配給一個變量:
$ num_of_files=$(find . -type f | wc -l)
嗯,這非常有趣。有沒有添加標誌的方法,比如檢查有多少個可執行文件? – 2012-08-10 21:06:56
@ConnorBlack查看find命令的聯機幫助頁。快速檢查將'-executable'標誌顯示爲參數:'find。 -executable -type f'。在命令行提示符處鍵入'man find'。潛入,不要讓文檔恐嚇你。 – 2012-08-10 21:36:41
這裏是如何計算目錄或做目錄名稱的東西。
#!/bin/bash
old_IFS=$IFS
IFS=$'\n'
array=($(ls -F /foo/bar/ | grep '/$')) # this creates an array named "array" that holds
IFS=$old_IFS # all the directory names located in /foo/bar/
echo ${#array[@]} # this will give you the number of directories in /foo/bar/
for ((i=0; i<${#array[@]}; i++))
do
echo ${array[$i]} # this will output a list of all the directories
done
另外,您可以:
ls -F /foo/bar/ | grep '/$' | cat > directorynames.txt
,然後計算行數。或者你可以擺脫這隻貓,並把上面的代碼放在一個for循環中,以便爲每一個換行符計數。
我想我會按照以下順序使用:find。 -maxdepth 0 -type d -print | wc' – 2012-08-10 20:33:32
目前還不清楚你在問什麼。你想計數文件或子目錄嗎?你想計算*子目錄中的文件*,還是隻計算頂級文件? – 2012-08-10 21:20:28
我的整個腳本的目的是這樣的:我想讓用戶傳遞一個目錄名稱,更改爲該目錄,並計算該目錄中的目錄數量和文件數量以及它們是否是'-e','' -r'或'-w' – 2012-08-10 21:24:16