一時ファイルを作るには mktemp が使える
Temporaryなファイルがほしいときは、mktemp で一発解決
$ mktemp
だけど一時的なディレクトリを作るにはどうする?
mktemp すると、ファイル作成されちゃう。消すのも面倒くさい。
そこで --dry-run なオプションを使うと解決
$ mktemp -u $ mktemp --dry-run # または
この、名前だけ取得する -u と組み合わせて戦う
$ mkdir $( mktemp -u )
ディレクトリを作るに、まぁ、mktemp -d
すればイイんですが。私はパイプも作れる汎用的なのを求めてたので。
同じようにして、一時的な名前付きパイプも
名前付きパイプも同じですね
$ mkfifo $( mktemp -u )
一時ファイルを作るよりパイプで渡すほうがblockingなI/O が効くので便利なことも多いし、容量期にしなくてイイのも強い。lseek 出来ないけど。
何に使ってるかわからなくなるので、ファイル名のメモを残す
ファイル名のテンプレートを残せる。
オプション -t を使えば、tmp ファイルがなんのために作られたかよく分かる。
$ mktemp -u -t sample.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.jpg /tmp/sample.3P6NasUvF857yfZHNaz8Xr9wj5yMz1t2.jpg
$ mktemp -u -t my-app-dir-XXXX /tmp/my-app-dir-02tP
Xは最低3文字アレばいいみたい
/tmp なら再起動時に消えるから安心
/tmp は再起動時に消えるから安心。
最近だと、systemd のジョブに登録されてますね。
systemd-tmpfiles-clean.service
シェル・スクリプトの場合はtrapすればイイ
temp_name=$( mktemp -u) trap 'rm -rf "$temp_name"' EXIT INT TERM HUP
ruby なども trap ですね。