這裡介紹如何使用 Linux 的 mktemp
指令,自動建立檔名不重複的暫存檔案或目錄,方便程式或指令稿存放資料。
有時候在撰寫程式或是指令稿時,會需要建立暫存檔來存放暫時性的資料,直覺的作法是在特定的目錄下,以亂數的方式來命名暫存檔,並檢查是否有檔名重複的問題,雖然產生亂數暫存檔的實作不會很複雜,但若有現成可用的工具,當然會更方便。
mktemp
指令就是一個專門用來產生暫存檔案或目錄的小工具,它會以亂數命名的方式暫存檔案或目錄,並傳回檔案或目錄的路徑。
mktemp
預設會自動以亂數建立一個空的暫存檔:
# 建立暫存檔 MY_TEMP_FILE=`mktemp`
執行了 mktemp
指令之後,建會建立一個暫存檔,並且傳回檔案路徑,接著我們就可以使用這個建立好的暫存檔案了:
# 查看暫存檔 ls -l ${MY_TEMP_FILE}
-rw------- 1 gtwang gtwang 0 5月 9 21:06 /tmp/tmp.K058cGnZVp
而在使用完之後,記得要將這個暫存檔刪除:
# 刪除暫存檔 rm ${MY_TEMP_FILE}
有時候我們的程式會需要好多的暫存檔,用來儲存不同的資料,這種狀況下就可以考慮直接建立一個暫存目錄,在這個目錄中自己建立多的檔案來使用:
# 建立暫存目錄 MY_TEMP_DIR=`mktemp -d`
mktemp
在建立暫存目錄後,會傳回目錄的路徑,接著我們就可以在這個暫存目錄中,自由建立多個檔案了。
# 查看暫存目錄 ls -ld ${MY_TEMP_DIR}
drwx------ 2 gtwang gtwang 4096 5月 15 16:47 /tmp/tmp.fbjDb2oPUY
在這個暫存目錄之下,我們就可以很放心使用固定的檔案名稱,不用擔心跟其他程式衝突:
# 在暫存目錄中建立檔案 echo "Hello" > ${MY_TEMP_DIR}/a.txt echo "World" > ${MY_TEMP_DIR}/b.txt
使用完畢之後,就直接把整個暫存目錄刪除即可:
# 刪除暫存目錄 rm -fr ${MY_TEMP_DIR}
在預設的狀況下,mktemp
會將暫存檔案(或目錄)放在系統的 /tmp
之中,如果想要改變放置的位置,可以加上 -p
參數並指定放置位置:
# 在 /home/gtwang/tmp 目錄下建立暫存檔 MY_TEMP_FILE=`mktemp -p /home/gtwang/tmp`
若要更改暫存目錄的放置位置,方法也相同:
# 在 /home/gtwang/tmp 目錄下建立暫存目錄 MY_TEMP_DIR=`mktemp -d -p /home/gtwang/tmp`
mktemp
預設會用 tmp.XXXXXXXXXX
這樣的格式來命名暫存檔(或暫存目錄),若要自己指定檔名格式,方便辨識暫存檔是由哪個程式產生的,可以執行 mktemp
時,加上檔名的樣板:
# 自行指定檔名格式 MY_TEMP_DIR=`mktemp /tmp/my_temp_file_XXXXXX.txt`
在指定檔名的樣板時,一定要包含好幾個 X
,mktemp
會把這些 X
自動替換成亂數產生的字母,避免產生重複的檔名。另外也要注意必須加上檔案的路徑,否則暫存檔會直接建立在目前的目錄之下。