Files

在文件出現在文件夾中的那 一刻重命名文件

  • February 5, 2018

這是上下文:

在 samba 伺服器上,我有一些文件夾(我們稱之為 A,B,C,D ),它們應該從網路掃描器接收文件。掃描器呈現一個 PDF 文件,命名如下:

YYYYMMDDHHmmss.pdf

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

我需要在它們出現在文件夾中的那​​一刻或在一分鐘內重命名這些 PDF(我正在考慮 crontab)。

重命名必須是類似的東西

"

$$ prefix_specific_to_the_folder $$_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."

我真的很難找到正確的語法。

我寧願檢索文件創建的系統時間戳並用它重命名文件,而不是使用掃描器生成的文件名。

這是圍繞該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

如果在同一天創建了兩個或多個文件,我不確定您期望會發生什麼。目前,最近到達(和處理)的文件將替換同一日期的任何較早文件。

引用自:https://unix.stackexchange.com/questions/259330