kanekunのメモ

AIが作ったプログラムのバックアップ

サクラエディタ正規表現(Perplexity)

サクラエディタでメールアドレスにマッチする正規表現は以下のようになります1235^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9][a-zA-Z0-9-][a-zA-Z0-9].)+[a-zA-Z]{2,}$解説:

  • ^ は文字列の先頭を表す
  • [a-zA-Z0-9_.+-]+ はローカル部分を表し、英数字と記号 _.+- の1文字以上の繰り返し
  • @ はアットマーク
  • ([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+ はドメイン部分を表し:
    • [a-zA-Z0-9] は英数字の1文字
    • [a-zA-Z0-9-]* は英数字とハイフンの0文字以上の繰り返し
    • [a-zA-Z0-9]* は英数字の0文字以上の繰り返し
    • \. はドット
    • + は直前のグループの1回以上の繰り返し
  • [a-zA-Z]{2,} はトップレベルドメインを表し、英字2文字以上
  • $ は文字列の末尾を表す

ただし、この正規表現ではドットに関する制限(ドットが最初や最後にある、連続したドット)のチェックはできていません。
これを考慮した正規表現は以下のようになります5^[a-zA-Z0-9_+-]+(.[a-zA-Z0-9_+-]+)@([a-zA-Z0-9][a-zA-Z0-9-][a-zA-Z0-9]*.)+[a-zA-Z]{2,}$サクラエディタの検索や置換で上記の正規表現を使うことで、メールアドレスにマッチさせることができます。

ログファイル追記判定(ChatGTP)

#!/bin/bash

# ログファイル名
LOGFILE="zip.log"

# ログファイルが存在し、かつ最終修正時刻が60分以内の場合は追記、そうでなければ新規作成するための判定
if -f "$LOGFILE" ; then
    # 現在時刻とログファイルの最終修正時刻の差分を分で計算
    DIFF=$(($(date +%s) - $(date +%s -r "$LOGFILE")))
    if $DIFF -gt 3600 ; then
        # 60分を超えている場合はログファイルを新規作成
        echo "ログファイルが60分以上古いので、新規に作成します。" > "$LOGFILE"
    fi
else
    # ログファイルが存在しない場合は新規作成
    echo "ログファイルが存在しないため、新規に作成します。" > "$LOGFILE"
fi

# ZIP圧縮を行うコマンドを実行し、標準出力と標準エラー出力をログファイルに追記
# 圧縮対象のファイルやディレクトリを適宜指定してください
zip -r compressed_file.zip target_directory_or_file >> "$LOGFILE" 2>&1

echo "圧縮処理が完了しました。" >> "$LOGFILE"

実行時エラー対応


memo

-Dlog4j2.loggerContextFactory
=org.apache.logging.log4j.core.impl.Log4jContextFactory


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
 

POI(GPT4)

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ooxml.POIXMLProperties;

import java.io.File;

public class ExcelPropertiesExample {
    public static void main(String[] args) {
        try {
            // Excelファイルの読み込み
            OPCPackage opcPackage = OPCPackage.open(new File("あなたのファイルパス.xlsx"));
            XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
            
            // プロパティの取得
            POIXMLProperties props = workbook.getProperties();
            POIXMLProperties.CoreProperties coreProps = props.getCoreProperties();
            String title = coreProps.getTitle();
            String subject = coreProps.getSubject();
            String author = coreProps.getCreator();
            
            // プロパティの表示
            System.out.println("タイトル: " + title);
            System.out.println("サブジェクト: " + subject);
            System.out.println("作者: " + author);
            
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

BeanShell(Claude3)

import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

// Excelファイルを開く
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("path/to/your/file.xls"));

// SummaryInformationを取得
SummaryInformation si = (SummaryInformation) fs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
if (si != null) {
    String title = si.getTitle();
    String subject = si.getSubject();
    String author = si.getAuthor();
    // 他のプロパティを取得...
}

// DocumentSummaryInformationを取得
DocumentSummaryInformation dsi = (DocumentSummaryInformation) fs.getRoot().getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
if (dsi != null) {
    String category = dsi.getCategory();
    String manager = dsi.getManager();
    String company = dsi.getCompany();
    // 他のプロパティを取得...
}

fs.close();

backup(Gemini)

#!/bin/bash

# バックアップ対象ディレクト
SRC_DIR=/path/to/source_directory

# バックアップ先ディレクト
DEST_DIR=/path/to/destination_directory

# 差分バックアップ用の昨日の日付を取得
YESTERDAY=$(date -d "yesterday" +%F)

# 曜日を取得
WEEKDAY=$(date +%u)

# ログファイル
LOGFILE=/var/log/backup.log

# ログ関数の定義
log() {
    echo "$(date) $1" >> $LOGFILE
}

# フルバックアップを実行
full_backup() {
    log "Performing full backup..."
    zip -r $DEST_DIR/full_backup_$(date +%Y%m%d).zip $SRC_DIR
    log "Full backup completed."
}

# 差分バックアップを実行
differential_backup() {
    log "Performing differential backup..."
    find $SRC_DIR -mtime -1 -newer $YESTERDAY -type f -print0 | zip -0r $DEST_DIR/diff_backup_$(date +%Y%m%d).zip -@
    log "Differential backup completed."
}

# メイン処理
case $WEEKDAY in
    1|2|3|4|5|7) # 平日および土曜日
        differential_backup
        ;;
    6) # 日曜日
        full_backup
        ;;
esac