フォルダに表示されるようにファイルの名前を変更する

フォルダに表示されるようにファイルの名前を変更する

コンテキストは次のとおりです。

Sambaサーバーには、ネットワークスキャナからファイルを受信するフォルダ(A、B、C、Dという)があります。スキャナは、次の名前のPDFファイルをレンダリングします。

YYYYMMDDHHmmss.pdf

(年、月、日、時、分、秒)

このPDFファイルがフォルダに表示されるように、または1分以内に名前を変更する必要があります(crontabを考えています)。

名前の変更は次のようにする必要があります。

"[フォルダ別プレフィックス]_YYYY-MM-DD.pdf"

"date + % F"が私が望むタイムスタンプを実行していることを確認しました。スクリプトでプレフィックスを手動で設定するだけです。

私の心の中にはアルゴリズムがありますが、こういうことに違いありません。

 "-read file.pdf
    -if the name of the file doesn't have [prefix] 
     -then mv file.pdf [prefix]_[date].pdf
    -else nevermind about that file."

正しい構文を見つけるのは本当に難しいです。

スキャナで生成されたファイル名を使用する代わりに、ファイル生成のシステムタイムスタンプを検索し、それを使用してファイル名を変更することをお勧めします。

ベストアンサー1

以下は、このユーティリティに基づいて構築されたソリューションですinotifywait。 (これを使用することもできますが、incron同様のコードがまだ必要です。)起動時にこのコードを実行します/etc/rc.local

#!/bin/bash
#
cd /path/to/samba/folder

# Rename received files to this prefix and suffix
prefix="some_prefix"
suffix="pdf"

inotifywait --event close_write --format "%f" --monitor . |
    while IFS= read -r file
    do
        # Seconds since the epoch
        s=$(stat -c "%Y" "$file")

        # Convert to YYYY-MM-DD
        ymd="$(date --date "@$s" +'%Y-%m-%d')"

        # Rename the file. Mind the assumed extension
        mv -f "$file" "${prefix}_$ymd.$suffix"
    done

同じ日に複数のファイルが作成された場合、何が起こると予想されるのかわかりません。現在最も最近到着した(および処理された)ファイルは、同じ日付の古いファイルを置き換えます。

おすすめ記事