2016-01-24 114 views
1

完成的產品旨在以遞歸方式計算指定目錄中的所有內容,或者在沒有輸入參數時輸入當前內容。現在我只是試圖讓它在指定的目錄中計算任何東西。我很難得到最後的陳述來計算任何事情。 它會在目錄中回顯0個文件。計算指定目錄中的所有文件/目錄 - bash/shell腳本

任何人都可以給我任何提示嗎?我仍然是初學者,所以請放輕鬆,謝謝!

#!/bin/bash 
#A shell script program that counts recursively how many directories/files exist in a given directory. 

declare -i COUNT=0 
declare -i COUNT2=0 
#The script will treat COUNT as an integer that is 0 until modified. 
if [ "$#" -eq "0" ] 
    then 

     for i in * 
     do 
      ((COUNT++)) 
     done 
    ((COUNT--)) #This is done because there is always an overcount of 1. 
    echo "There are $COUNT files and/or directories in the current directory here." 
fi 

if [[ -d $1 ]] 
    then 
     for i in $1 
     do 
      ((COUNT++)) 
     done 
    ((COUNT--)) #This is done because there is always an overcount of 1. 
    echo "There are $COUNT files and/or directories in $1." 
fi 

if [[ -d $2 ]] 
    then 
     for i in $2 
     do 
      ((COUNT2++)) 
     done 
    ((COUNT2--)) #This is done because there is always an overcount of 1. 
    echo "There are $COUNT2 files and/or directories in $2." 
fi 
exit 0 
+0

你在哪裏處理代碼中的遞歸?你測試過了嗎? – Derlin

回答

4

首先,你可以做你希望與一個班輪什麼:

find . | wc -l 

find .的意思是「在當前目錄及其所有子目錄中搜索」。由於沒有其他的說法,它會簡單地列出一切。然後,我使用管道和wc,它代表「字數」。 -l選項表示「僅輸出行數」。

現在,對於您的代碼,這裏有一些提示。首先,我不太明白你爲什麼重複你的代碼三次(0,1美元和2美元)。你可以簡單地做:

dir="$1" 
if [ -z "$dir" ]; then dir="."; fi 

您存儲在$ DIR命令行參數的值,如果沒有提供,(-z的意思是「爲空」),你指定一個默認值到DIR。

for i in $1將不起作用,如果$1是目錄的路徑。因此,相反,你可以使用

for i in $(ls $dir)

而且,在你的代碼,你不要指望遞歸。是自願的還是不知道如何進行?

+0

我想感謝您向我展示find命令,我從來沒有真正搞砸過它。我必須能夠接收多個目錄並輸出其包含的文件/目錄,這是$ 1和$ 2 if語句的原因。而且,現在我只是試圖得到任何結果,下一次遞歸! p.s - 我可以使用遞歸搜索:'for i in $(ls - R $ dir)'? – slothforest

+0

不要使用任何東西的輸出。 ls是交互式查看目錄元數據的工具。用代碼解析ls輸出的任何嘗試都被破壞了。 Globs更簡單更正確:''用於* .txt文件''。閱讀http://mywiki.wooledge.org/ParsingLs –

+0

不要這樣做:對於$(command)或'command'或$ var中的x。 for-in用於迭代參數,而不是(輸出)字符串。相反,使用glob(例如。* .txt),數組(例如「$ {names [@]}」)或while-read循環(例如,在讀取-r行時)。請參閱http://mywiki.wooledge.org/BashPitfalls#pf1和http://mywiki.wooledge.org/DontReadLinesWithFor –

相關問題