Bash

用於檢測何時將文件添加到文件夾和命令 exec 的 bash 腳本

  • December 17, 2017

我正在嘗試編寫一個腳本來檢測何時將文件添加到特定文件夾並使用最後添加的文件名稱執行命令。我特別想做的是為我添加到特定文件夾中的每個文件創建一個二維碼。

所以我需要做的是:檢測文件何時添加到文件夾,獲取基本文件名並傳遞給qrencode -o filename.png mysite/filename.ext,理想情況下,讓它有一個在啟動時啟動的 cronjob。

我正在閱讀有關 using的內容inotify,但我不確定如何實現這一點。

您可以使用它inotifywait來達到預期的效果。

while true
do
inotifywait -r -e create /directory && /bin/bash path/to/your/script
done

使用 .在後台執行此腳本nohup

試試incron。它可以通過同名軟體包在大多數發行版中獲得。我將使用 Debian 和 CentOS 作為範例,只要它涵蓋了幾乎所有情況。

步驟是這樣的:

1)安裝incron

# For Debian
apt-get install incron
# For CentOS
yum install incron

在 CentOS 中,您還需要手動啟動和啟用它。

# For CentOS6
chkconfig incrond on
service incrond start
# For CentOS7
systemctl enable incrond.service
systemctl start incrond.service

2)將您的使用者添加到文件**/etc/incron.allow**中允許(只需添加使用者名)

  1. 使用命令incrontab -e添加 incrontab 規則

規則是這樣的:

/full/path/to/your/directory/ IN_CREATE your_script $#

IN_CREATE是在監視目錄中創建文件或目錄的事件。

your_script是腳本的名稱,它獲取文件並完成所有工作。

**$#**是觸發事件的文件名。

在您的情況下,您需要更改文件的副檔名,因此最好創建一些簡單的腳本來獲取文件並執行所有操作。

類似的東西(我試圖檢查所有內容,但它仍然可能包含錯誤 -使用前手動檢查):

#!/bin/bash
# Setting constants
output_extension='.png'
path_to_save_files='/full/path/to/needed/folder/'

# Using quotes and $@ to catch files with whitespaces
input_file="$@"

# Verifying input extension
[[ "$input_file" =~ ".*\.txt" ]] || exit 

# Cutting everything from the start to last '/' appeared
input_name=${input_file##/*/}

# Cutting everything from the end to first '.' appeared
short_name="${input_name%.*}"

# Creating full name for output file
output_name="${short_name}${output_extension}"

# Creating full path for your output file
output_file="${path_to_save_files}${output_name}"

# Performing your command at last
qrencode -o "$output_file" "$input_file" 

引用自:https://serverfault.com/questions/810036