0

運がなければ、エレガントなソリューションを探しました。最終的に、文字で始まり、数字または大文字のみを含む固定長 (3 文字) の一意の ID を (1 台のマシンで) 多数作成する必要があります。(例: AXX、X は数字または文字)

一意の ID を生成するために mktemp ユーティリティを使用しています。問題: mktemp は、大文字と小文字を区別する一時的なファイル名を作成します。

現在、生成された各一時ファイルを「GeneratedFile」ディレクトリに保存しています。次に、ファイルの大文字と小文字を区別しないバージョンを作成し、ディレクトリ "ExistingID" に保存します。mktemp を呼び出すたびに、生成されたファイルに大文字と小文字を区別しない対応するファイルが ExistingID ディレクトリにあるかどうかを確認します。存在する場合は、現在一意の ID として使用されていないファイル名を生成するまで、mktemp を呼び出し続けます。

これを行うより良い方法はありますか?

4

2 に答える 2

0

これはほとんど簡単すぎるように思えますが、

mktemp AXX | tr 'a-z' 'A-Z'

アップデート

これにより、 の後に一意でない名前が生成される可能性があるという点は良いことですが、一意でランダムtrにする必要がある理由はありますか? それらを辞書順に生成しないのはなぜですか?

 # pseudobash, untested
 digit1=0
 digit2=0
 chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 function nextName {
      str= "A" chars[digit2] chars[digit1]
      ((digit1++))
      if digit1 > 35
      then
          ((digit2++))
          digit1=0
      fi
      return str
  }
于 2009-02-26T16:40:19.820 に答える