MacBook 上定期執行 Bash Shell

以 macOS 為 Big Sur 的 MacBook Pro 示範

小序言

在 MacBook 上,你可能會有些事情定期需要去做。

時不時會更新 brew 然後升級已透過 brew安裝的套件

或是未來某個特定時間已經確定會透過 MacBook 辦的事情。

啊,下下週三早上需要寄個信給彌豆子

這些事情都能夠透過 MacBook 裡頭內建的 Automator 搭配蘋果行事曆來辦到。花個數分鐘設定,交給工具來替你執行這些瑣碎的項目,你就不用在耗費精神嘗試記住這些小事,而是全力投入心力在追《昨日的美食》或是安心地浸淫在被《隻狼》虐得通體舒暢的幸福裡面。

範例

定期清理一個特定目錄底下所有子目錄的內容

準備工作

首先,我們準備一個可以清理特定目錄底下所有子目錄內容的 bash shell 腳本。

currentDirectory="/Users/hero.boy"
cd ${currentDirectory}
subDirectories=$(ls -d */)
for item in ${subDirectories}; do
pushd ${item}
rm -rf ./*
echo "Finished cleaning ${currentDirectory}${item}"
popd
done

製作服務

接著在啟動台搜尋 Automator ,將它打開。在跑出來的視窗中點擊新文件,接著在點擊「快速動作」,在搜尋欄中搜尋「shell」,點擊「執行 Shell 工序指令」兩次,將上述腳本內容複製然後貼到指令視窗中。

在「啟動台」搜尋 Automator
在第一次跑出的視窗點擊新文件
點擊「快速動作」
搜尋「shell」接著點擊執行 Shell 工序指令」

貼上腳本內容後,需要調整一些設定。將接受相關的那個欄位選擇「沒有輸入」,然後目的地選擇「Finder」和「Calendar」。

調整相關設定

你可以在視窗右上角選擇執行看看結果,沒有問題後,就可以按下 ⌘ + S 以好識別的名稱儲存這個服務。這時,你到 Finder 的服務中理論上會出現你剛剛製作好的服務才對。

在 Finder 中查看自製服務

定期執行自訂服務

這時你點這個自製服務,就會將指定目錄底下的所有子目錄的內容給清除掉,但還差了一步,那就是定期執行這一部分。我們可以透過行事曆來辦到這件事。只要你剛剛製作服務時的目的地有記得選行事曆,那麼接下來就是打開行事曆。

先新增一個事件,你想要每週三執行,那麼就

  1. 先建立一個週三的事件。

2. 在重複執行那裏選擇是,週期選擇每一週。

3. 接著在「提示」那裏選擇「自訂」,然後選擇「打開檔案」到服務目錄(~/Library/Services/)底下選擇你剛剛做好的服務。

⌘ + ⇧+ G 搜尋 ~/Library/Services/

4. 提示時間選擇「事件發生時」。

事件發生時,以打開(執行)這個服務作為提示

完成後,每週三的指定時間這個服務就會被執行啦!

參考

  1. Vandersteen, J., n.d. How To Schedule Automator Tasks In Mac OS X. [online] Small Business — Chron.com. Available at: <https://smallbusiness.chron.com/schedule-automator-tasks-mac-os-x-39132.html> [Accessed 13 November 2020].
  2. andilabs, 2013. Location Of Services Created In Automator. [online] Ask Different. Available at: <https://apple.stackexchange.com/questions/14030/location-of-services-created-in-automator> [Accessed 13 November 2020].
Photo by Alex Knight on Unsplash

--

--

Scott Hsieh (史考特)
Scott Hsieh (史考特)

Written by Scott Hsieh (史考特)

10 x AWS-certified, Data Architect in the 104 Corporation. An AWS Data Hero

No responses yet