namazu-ml(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Inconvinuence point with -F option



すぎうらしろうです。

<199904232257.HAA29672@xxxxxxxxxxxxxx>の記事において
私は書きました。

>> そんなとき、"-F"で指定するファイルの中に"!"で始まる行があったらそのデ
>> ィレクトリ以下はindex化の対象外にするというのはどうでしょう?これなら、
>> あるディレクトリ以下のいくつかのディレクトリをindex化したくないという
>> 条件の時にとても便利です。問題は、
>> 
>> /var/news/lib/fj/               以下は基本的にindex化するが
>> /var/news/lib/fj/mail/          以下は、しない。しかし、
>> /var/news/lib/fj/mail/friends/  以下はindex化したい
>> 
>> という要求があると評価が面倒だという事です。
>> この場合は、後から書いた方が有効ということで、
>> 
>> /var/news/lib/fj/
>> !/var/news/lib/fj/mail/
>> /var/news/lib/fj/mail/friends/
>> 
>> と、すると目的が達成されるということでいいのではないでしょうか?

というのに関して、シャコシャコとgawkで変なものをこさえてみました。
"makeindexfiles.awk"などの名前でセーブし、上記のような通常"-F"オプシ
ョンで使うような物に毛の生えたような設定ファイルを例えば"nmzdyrects"
などという名前で作り

% makeindexfiles.awk nmzdyrects

とすると、標準出力にタラタラと目的のファイル群を出力します。
それを適当な名前でセーブして、"-F"オプション付きでそのファイルを指定
し、mknmz を実行すれば2度手間になりますが、"!"付きのディレクトリは
index化しないという目的が達成されます。
このスクリプトの出力結果をみて、HDDのヘッドの寿命が心配になった方は 
`sort -n` というパイプを通してあげてください。

実行には、別途`find`、`rm`コマンドが必要で "/dev/pid" を参照している
ので、DOS系のOSでの動作はどうなるのかわかりません。

"makeindexfiles.awk"にはいろいろ問題があるので、実用になさらない方が
いいと思います。一番の問題は、私はいつも "-a" オプションを付けている
ので、それを付けない人の事は全く考慮されていないということでしょうか。
このスクリプトを書いて知った事なんですが、"-F"オプションで指定したフ
ァイルに、ディレクトリーではなくファイルが書かれていると、それがどん
なファイル名であれ、有無言わさずindex化されるみたいです。
それと、シンボリックリンク回りもちょっと違います。

遊びで使ってみて下さい。

--------------------------------------------------------------------
#!/usr/local/bin/gawf -f
BEGIN	{

	# tmp file
	getline < "/dev/pid"
	TMP_FILE = "%mkindextmp%" $0

	FS="!"
	if (ARGC <= 1) exit;
	indexes = 0
	while (getline < ARGV[1]) {
	  gsub(/ /,"")
	  gsub(/	/,"")
	  if ( $0 != "" ) {
	    if ($0 ~ "^!") {
	      IGUNORE[indexes] = 1
	      DYRECTORY[indexes] = $2
	    } else DYRECTORY[indexes] = $1
	  indexes+=1
	  }
	}
	printf("") > TMP_FILE
	for ( i=0 ; i < indexes; i++) {
	  if ( IGUNORE[i] != 1 ) {
	    flags = 1
	    for ( j=0 ; j < i ; j++ )
	      if ( index(DYRECTORY[i], DYRECTORY[j]) == 1 ) flags = 0 
	    if (flags == 1) {
	      command = "find -L "DYRECTORY[i]" -type f -print >>"TMP_FILE
	      system(command)
	    }
	  } 
	}

	ARGC = 2
	ARGV[1] = TMP_FILE
}
	{	INDEX_FILES[$0] = 1	}
END{
	for ( i=1 ; i < indexes ; i++ ) {
	  if ( IGUNORE[i] == 1 ) {
	    for ( j in INDEX_FILES ) 
	      if ( index(j,DYRECTORY[i]) == 1 ) INDEX_FILES[j] = 0
	  } else {
	    for ( j in INDEX_FILES ) 
	      if ( index(j,DYRECTORY[i]) == 1 ) INDEX_FILES[j] = 1
	  }
	}
	for ( i in INDEX_FILES ) 
	  if (INDEX_FILES[i] == 1) print i
	command = "rm "TMP_FILE
	system(comnand)
}
--------------------------------------------------------------------

--  
      すぎうらしろう(Sugiura Shiro)      E-mail : sugiura@xxxxxxxxxxxx
      (伊)x4        <URL:http://www.kt.rim.or.jp/~sugiura/utada.html/>
       御希望の方に、もれなく less-332.tar.gz をプレゼントしています
      [     If you want to talk with me, you MUST speak Japanese     ]