見出し画像

大量フォントを一括で削除する for Mac

先日、某所へ納品したiMacに修正作業が発生した。

起動時のオーバーヘッドを軽減したいとのことから、
以前、弊社にて設定を行ったフォント数千個のうち、
一部の使用しないものを削除することとなった。

納品したiMacは30台弱とそれ程多くはないが、フォントの数が数千個と膨大で、うち削除対象は凡そ800個分ある。
うさぎがショック死してしまいそうな程膨大な数だ。
まぁ死にはせんかったけど、兎に角これを手作業でするのでは、時間がかかり過ぎて現実的でない。

と、この様な背景から以下のスクリプトを組んだ。
とっても短いコードなので備忘録とか必要ないのだけれども
何かの時の為に一応残しておく。


■仕様

スクリプト本体 => 3.sh
データファイル => file.txt

構造は至って単純で、3.sh のループ処理で、file.txtの内容を一行づつ読み込んでコマンド処理するというもの。


■Codes

□シェルスクリプト本体 [ 3.sh ]

#!/bin/sh
 #fds ="/Users/nanosuke/t/files/"
fds2="/Library/Fonts/"
current=$(cd $(dirname $0); pwd)/file.txt

while read LINE
do
    echo $fds2${LINE}
    rm "$fds2${LINE}"
done < ${current}


※ 拡張子 .sh、改行コード LF、文字コード utf-8 で保存


□データファイル [ file.txt ]

データ1
データ2
データ3
データ4
データ5
...

※ 拡張子 .txt、改行コード LF、文字コード utf-8 で保存


■実行方法

0.管理者権限のあるユーザーでログインする
1.commandキー + Spaceキー で検索フォームを開く
2.terminal と入力しエンター ターミナルを立ち上げる
3.2で立ち上げた terminalに open ~ (チルダ) と入力しエンター
4.3で開いたファインダに 3.sh と file.txt をコピーする
5.terminalに以下のコマンドを入力
  sudo[スペース]sh[スペース]
6.5で入力した辺りに、3.shをドラッグ&ドロップ。
  以下の様に表示されていればOK

  sudo sh /Users/<ログインユーザー>/3.sh
  ※末尾にスペースがある場合一応削除しておく方が良いかも

7.エンターを押下
8.管理者パスワードを求められるので入力しエンター

だいたいこんな感じで実行される。

※3で開くディレクトリはユーザーホームディレクトリであることを確認  ホームディレクトリでないと実行できないので注意



■おまけ

for文で処理する場合。

□シェルスクリプト本体  for文(3.sh)

#!/bin/sh
 #fds ="/Users/nanosuke/t/files/"
fds2="/Library/Fonts/"
current=$(cd $(dirname $0); pwd)/file.txt
for var in `cat ${current}`
do
     echo $fds2${var}
     rm "$fds2${var}"
done

但し、file.txt のデータによっては意図した動作にならない場合があるので注意が必要である。
例えば、font Regular などスペースの入った行の場合、”font” と ”Regular” といった具合に要素を2つに分けられてしまう為正しい結果が得られない。
その場合はやはりwhile文を使用するべき。


※20220523 以下の2点に追記・修正しました
・実行方法の6、フルパスの末尾に/3.shの記述を忘れていたので追記
・おまけの最後の補足文の言い回しを少し修正

この記事が気に入ったらサポートをしてみませんか?