2012-03-26 176 views
1

大家好我想寫一個腳本遞歸搜索父目錄中的目錄並計算子目錄中有多少文本文件(.txt)。我還需要輸出文件相對路徑到父目錄。在目錄中搜索文件

可以說我有一個名爲文件

在此文件夾文件夾可能有:

Files/childFolder1/child1.txt 
Files/childFolder1/child2.txt 
Files/childFolder1/child3.txt 
Files/childFolder2/child4.txt 
Files/childFolder2/child5.txt 
Files/child6.txt 

所以輸出將

The files are: 

/childFolder1/child1.txt 
/childFolder1/child2.txt 
/childFolder1/child3.txt 
/childFolder2/child4.txt 
/childFolder2/child5.txt 
/child6.txt 

There are 6 files in the 'Files' folder 

到目前爲止,我有一個腳本這是這個:

#! /bin/csh 

find $argv[1] -iname '*.txt' 

set wc=`find $argv[1] -iname '*.txt' | wc -l` 

echo "Number of files under" $argv[1] "is" $wc 

我不知道如何使輸出,所以它只顯示相對於目錄的文件路徑。目前我的輸出是這樣的:

/home/Alice/Documents/Files/childFolder1/child1.txt 
/home/Alice/Documents/Files/childFolder1/child2.txt 
/home/Alice/Documents/Files/childFolder1/child3.txt 
/home/Alice/Documents/Files/childFolder2/child4.txt 
/home/Alice/Documents/Files/childFolder2/child5.txt 
/home/Alice/Documents/Files/child6.txt 
Number of files under /home/Alice/Documents/Files is 6 

這是不希望的。我也擔心我如何設置$wc變量。如果目錄列表很大,那麼這將會產生巨大的開銷。

回答

0

嘗試

find $argv[1] -iname '*.txt' -printf "%P \n" 

這應該得到所需要的輸出:)

海登

1

cd $argv[1],然後再使用find . -iname '*.txt'使相對目錄結果

0

而且,如果你不想執行找到兩次,你可以:

  • 將其輸出存儲在一個變量,但我不知道變量是否在csh中的大小是有限的;
  • 將其輸出存儲在臨時文件中,但純粹主義者不喜歡臨時文件;
  • 計算自己的行數while循環遍歷find的結果。

需要注意的是,如果你使用bash的替代,它支持進程替換你可以複製找到的輸出和管道它的多個命令與三通

find [...] | tee >(cmd1) >(cmd2) >/dev/null