command

超實用 parallel 指令教學

江湖闖久了,遇到資料處理相關的工作是常有的事,譬如為一堆 jpg 圖檔產生縮圖(thumbnail),或者把一堆 TSV 檔轉換成 CSV 格式,又或者把一堆資料夾分別用 tar 指令壓縮起來,諸如此類的。

針對這些情況,我個人很常用 awk 指令(詳見 awk 指令教學)產生所需要的指令,再丟到 shell 逐一執行,例如:

$ ls -l *.jpg | awk '{ print "tar -czvf "$9".tar.gz "$9}' | sh

上述指令中 ls -l *.jpg | awk '{ print "tar -czvf "$9".tar.gz "$9}' 的部分是為每 1 個 jpg 檔案產生 1 個對應的壓縮指令的字串,例如當前資料夾下有 a.jpgb.jpg 2 個檔案的話,就會產生下列 2 行字串:

tar -czvf a.jpg.tar.gz a.jpg
tar -czvf b.jpg.tar.gz b.jpg

上述字串再以 | sh 交給 shell 執行。

不過這種用法的缺點就是指令會逐一執行,如果有 300 個檔案,每個處理要 1 秒,那麼就得等待 300 秒才能完成工作。

如果能夠將這些工作平行處理,將可以大大減少執行時間,這就是本文要介紹的 parallel 指令的最大用途,讓人能在 shell 中平行處理多個指令,增加執行速度。

Posted on  Nov 23, 2023  in  Unix-like 命令列教學  by  Amo Chen  ‐ 8 min read

用 lsof 指令尋找佔用通訊埠的 Process

最近在開發 Next.js 相關的應用程式,無腦寫了無窮迴圈造成 dev server 關不掉,導致重啟 dev server 時會顯示以下警告訊息,該訊息顯示通訊埠(port) 3000 正在被其他 process 佔用:

warn  - Port 3000 is in use, trying 3001 instead.

本文紀錄如何找到佔用 port 的 Process Id 並且停止其運作。

Posted on  Dec 19, 2022  in  Unix-like 命令列教學  by  Amo Chen  ‐ 2 min read

jq - 用 startswith & endswith 過濾 JSON 資料

jq 是方便且成熟的 JSON 資料操作工具,可以幫助我們快速對 JSON 型態的資料進行擷取(extract)、過濾(filter)、運算(computing)甚至是重組(transform)等操作。

如果是常常需要與 JSON 格式資料打交道的開發者,可以投資一些時間好好熟悉 jq, 不過由於該工具提供各式各樣的功能,所以不免使用前要稍微查閱文件一番。

本文透過實際範例學習如何操作 jq 提供的 startswithendswith 函式進行資料篩選與過濾。

Posted on  Sep 12, 2022  in  Unix-like 命令列教學  by  Amo Chen  ‐ 2 min read

用 grep 搭配正規表示式擷取字串

grep 是長春實用的指令,每當需要從大量日誌(log)/資料中找出含特定字串的資料行時, grep 無疑是你的好幫手。

不過 grep 會將符合條件的資料行整行列出,因此如果只想要擷取符合的字串,就需要結合正規表示式(regular expression)中的幾個方法。

Posted on  Oct 8, 2021  in  Unix-like 命令列教學  by  Amo Chen  ‐ 2 min read

jq 實戰教學

隨著 JSON 格式作為資料交換格式大行其道,使用工具對 JSON 資料進行操作也逐漸成為家常便飯,各種工具中, jq 可說是一套十分易於操作的 JSON 操作工具。

本文將透過實際資料學習如何使用 jq 。

Posted on  Mar 27, 2021  in  Unix-like 命令列教學  by  Amo Chen  ‐ 14 min read

Bash 神奇的字串處理 - Shell Parameter Expansion

開發時難免都會需要撰寫 shell script 將一些瑣碎的事情自動化,最常見的大概就是利用 bash 撰寫 shell script 。

不過 bash 有些功能並非為眾人皆知卻十分方便,例如 shell parameter expansion 就有許多好用的功能,例如算字串長度、字串取代、大小寫轉換等等,如果學會運用,可以事半功倍!

本篇將介紹幾種好用的 shell parameter expansion 。

Posted on  Sep 1, 2020  in  Unix-like 命令列教學  by  Amo Chen  ‐ 3 min read

徹底移除 Android Studio

工欲善其事,必先利其器。 常常一個強迫症,就會想把很多用不到的東西給砍了,好挪出更多空間給需要的東西。

最近 android studio 不斷出問題,除了基本會卡住,更慘的是執行出來的程式時常鬼打牆。 我嘗試了 clean project 、rebuild project、restart IDE 但始終無解,沒耐心的我決定重裝。

第一步,就是要把舊有 as 斬草除根。

Posted on  Jun 28, 2020  in  Android  by  Zizi Chou  ‐ 1 min read