把一百個 Markdown 的 tags 拿掉

之前把筆記從 Evernote 匯出成 Markdown,然後轉移到 Obsidian 時,出現了很多怪異的 Tags,像是:

  • Tags: #07-
  • Tags: #04-
  • ……

這些 tag 每種都有好幾十個,如果我一份一份手動打開來刪,我大概花了三小時還處理不完。

這時就能感受到終端機的強大了。

script 檔

我寫了一個 script 檔(rm-tag.sh):

#!/usr/bin/env bash
pattern="$1"
find ./ -type f -name '*.md' -exec sed -i '' "/^$pattern$/d" {} +

程式解釋

  • find ./:從現在所在的資料夾往下找所有檔案和資料夾。
  • -type f:指定要找檔案(file),不要資料夾。
  • -name '*.md':只搜尋副檔名為 .md 的檔案。
  • -exec ... {} +:對前面選取的那些 .md 操作「...」。
  • sed -i '' "/^$pattern$/d":用 sed 工具去編輯檔案,把找到對應的「pattern」刪掉。
    • -i '':直接修改原檔案
    • ^:行開頭
    • $:行結尾
    • d:刪除這一行

所以我如果在終端機輸入 rm-tag.sh 'Tag(s): #07-',這個 script 做的事就是:

「在這個路徑底下,遍歷每一個 .md 檔。如果這些檔案裡面有 'Tag(s): #07-' 這整行文字,就刪掉。」

實作

接下來陸續在終端機裡面輸入:

rm-tag.sh 'Tag(s): #07-'
rm-tag.sh 'Tag(s): #04-'
rm-tag.sh 'Tag(s): #-2021' 

大概一兩分鐘,就搞定了!

較新一篇 不小心刪除 Git 分支,怎麼救回來
較舊一篇 用 FFmpeg 把多個影片接在一起