2012-03-26 22 views
1

こんにちはすべて親ディレクトリからディレクトリを再帰的に検索し、サブディレクトリにいくつのテキストファイル(.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 

だろうこれまでのところ私は、スクリプトを持って

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

これは:

#! /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変数の設定方法についても心配しています。ディレクトリ一覧が大きい場合、これは大規模なオーバーヘッドを取得することになります。

答えて

1

cd $argv[1]最初にしている場合、

0

また、所望の出力:)

ヘイデンを与える必要があります

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

これを試してみたディレクトリに結果が相対するためにfind . -iname '*.txt'を使用を実行したくない場合は、を2回検索してください。

  • 変数は出力に変数を格納しますが、変数のサイズがcshで制限されているかどうかはわかりません。
  • は、その出力を一時ファイルに格納しますが、純粋なファイルは一時ファイルを好きではありません。
  • あなた自身の行数をにカウントし、ループはfindの結果を繰り返します。

    find [...] | tee >(cmd1) >(cmd2) >/dev/null 
    
    :あなたはプロセス置換をサポートする、代わりにbashのを使用した場合、あなたがティーで複数のコマンドにの出力とパイプそれを見つける複製できること

注意

関連する問題