回答:
最も簡単な解決策は、ファイル名にタイムスタンプを追加し、1桁を使用しないことです。
空のファイルを作成する最も簡単な方法touch test$(date +%Y%m%d-%H%M%S)
は、という名前のファイルになりますtest20110802-170410
。2回目test*
は新しいタイムスタンプを取得するため、2つのファイルになります。
touch test$(date +%Y%m%d-%H%M%S) ; touch test$(date +%Y%m%d-%H%M%S)
、1つのファイルしか作成されませんでした。Nanoseconds-timeは機能しtouch test$(date +%Y%m%d-%H%M%S%N) ; touch test$(date +%Y%m%d-%H%M%S%N)
、touch test$(date +%Y%m%d-%H%M%S%N) test$(date +%Y%m%d-%H%M%S%N)
それぞれ2つのファイルを作成します。
$()
式をネストできるため、使用する方が適切ですが、バックティックを使用することもできます touch test`date +%Y%m%d-%H%M%S`
。
それを行うための一般的なコマンドは存在しないと思いますが、次のように考えることができます。
create() {
read prefix number suffix < <(sed -r 's/(.*)([0-9]+)\.(.*)$/\1 \2 \3/' <<<"$1")
while true; do
file="$prefix$number.$suffix"
if [[ -e "$file" ]]; then
((number++))
else
touch "$file"
break
fi
done
}
関数への入力パラメータは、プレフィックス、番号、サフィックスに分割され、ファイルが存在するまで、番号が増加します。空きスロットが見つかりましたtouch
。ファイルはで作成されました。
分割メカニズムをニーズに合わせて調整し、さまざまなエラーチェックを追加する必要があります。
シーケンス番号が必要ない場合は、mktemp
コマンドを使用するのが最も簡単な方法です。
TMPFILE=$(mktemp /tmp/example.XXXXXXXXXX) || exit 1 echo "program output" >> $TMPFILE
TMPFILE='/tmp/tmp.$$'; touch $TMPFILE