Files
在文件出現在文件夾中的那 一刻重命名文件
這是上下文:
在 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
如果在同一天創建了兩個或多個文件,我不確定您期望會發生什麼。目前,最近到達(和處理)的文件將替換同一日期的任何較早文件。