コマンドラインから複数のファイルの文字列を置換(mac)

複数のファイルをコマンドで一括置換をする方法。

[shell] $ grep -l ‘置換前文字列’ 対象のファイル | xargs sed -i ” ‘s/置換前文字列/置換後文字列/g'[/shell]

macではsedがBSD版のため、sedのiオプションに空文字を渡す必要がある。これはバックアップ用拡張子で、例えば[shell] sed -i ‘.bak'[/shell]とすると 対象ファイル.bak というバックアップファイルが作成される。iオプションにから文字を渡すことで、既存のファイルに上書きさせることができる。

参考

vimでファイルの文字コードや改行コードを変えて読み直す

windowsで作成したテキストファイルをmacのvimで開くときなど、文字化けが発生する場面での処理方法。

文字コードを変える

[shell]
:e ++enc=euc-jp
:e ++enc=shift_jis
:e ++enc=utf-8
[/shell]

改行コードを変える

[shell]
:e ++ff=dos // CRLF
:e ++ff=mac // CR
:e ++ff=unix  // LF
[/shell]

同時に指定することも可能

[shell]
:e ++enc=shift_jis ++ff=dos
[/shell]

参考

http://nanasi.jp/articles/howto/file/open-with-format.html
https://qiita.com/bezeklik/items/aca37ffb127821311d6b

macのcaffeinateコマンドでスリープを制御

長い処理を行なっているときに、macがスリープしてしまって困る場合がありますよね?私はあります。
そこで使用するのが caffeinate コマンド。

よく使うオプションがこちら。
[shell]
$ caffeinate -di
[/shell]
ディスプレイ(d)システム(i)のスリープを制御。
ctrl + c でcaffeinateを終了するまでスリープしないようになります。

何かをごっそりコピーして、時間がかかる場合には以下のようにすることもできます。
[shell]
$ caffeinate -di cp /path/to/files /path/to/output
[/shell]

参考

https://henry.animeo.jp/blog/2013/12/07/caffeinate/
https://qiita.com/hakuro/items/c2302f1ad83bf3424a1a

jpegoptimを使ってコマンドラインからjpgファイルを圧縮

コマンドラインからサクッとファイルサイズを圧縮。jpeg版。
https://github.com/tjko/jpegoptim

インストール

macならHomebrewからインストールが可能。
[shell]
$ brew install jpegoptim
[/shell]

使い方

[shell]
$ jpegoptim -s -m 90 path/to/image.jpg
[/shell]
上記コマンドで、画像ファイル path/to/image.jpg を圧縮して上書きします。-m 90 で画質を90%に指定している。
よく使うであろうオプションはこんな感じ。

-d <path> 出力ディレクトリ
-o        同名ファイルがあった場合上書き。
-s        EXIFなどのメタデータを全削除。

使い方やその他のオプションについては [shell]jpegoptim -h[/shell]で確認できます。

png版はこちら → https://qroon.link/compress_png_on_pngquant

pngquantを使ってコマンドラインからpngファイルを圧縮

コマンドラインからサクッとファイルサイズを圧縮。
https://pngquant.org/

インストール

macならHomebrewからインストールが可能。
[shell]
$ brew install pngquant
[/shell]

使い方

[shell]
$ pngquant –ext .png -f path/to/image.png
[/shell]
上記コマンドで、画像ファイル path/to/image.png を圧縮して上書きします。—ext .png で接尾辞を設定、-fで上書きを許可します。これらオプションを指定しない場合、ファイル名-or8.png もしくは ファイル名-fs8.png として保存されます。
よく使うであろうオプションはこんな感じ。
[shell]
–force / -f        上書きを許可。
–skip-if-larger    オリジナルサイズより縮小された場合のみ保存。
–output file / -o  file ファイル名をfileとして保存。
–ext new.png       圧縮ファイルの接尾辞と拡張しを new.png として出力。
–quality min-max   画像のクオリティをmin〜maxの範囲で出力。0〜100で指定。
–speed N           出力スピードの設定。1 が遅くて高精度、3がデフォルト、11が速くて低精度。
[/shell]
使い方やその他のオプションについては [shell]pngquant -h[/shell]で確認できます。

macでコマンド一発で画像を縮小 sips

ブログにアップする画像を縮小するために使用しているsipsコマンドを紹介います。

macにインストールされているscriptable image processing system、略してsipsコマンド。コマンドラインで画像の作成日時や解像度などの情報を操作するコマンドです。

さまざまな情報の確認、変更ができるのですが、一番よく使用するのが画像の縮小。これを覚えるだけでもかなり便利です。
[shell]
$ sips -Z 1600 path/to/imagefile.jpg –out path/to/outputfile.jpg
[/shell]

これで画像(path/to/imagefile.jpg)の長辺を1600pxに変更してpath/to/outputfile.jpgとして保存。–out以降を省略すると画像を上書きしてしまうので注意してください。

vimのカラーを変更

vimのカラースキームの変更方法

vimでコマンドからカラースキームを変更します。

・カラースキームの変更
color-nameの部分をカラースキームの名称に置き換え。

:colorscheme color-name

・背景色の変更

:set background=light
:set background=dark

 

Vagrantで肥大化したファイルの縮小

macのTimeMachineで容量不足の警告が出ていたため調べて見ると、Vagrantのファイルがとんでもなく肥大化していた。
その容量なんと2.16TB。SSDの容量250GBなのになぜ。。。


どうやら仮想環境内で不要なファイルが蓄積しているのが原因らしい。
ファイルの情報を見ると、実際のファイルサイズは50GBぐらいのようだけど、TimeMachineで保存するときは展開して保存するから2TB使うとかなのかな??

そんなわけで仮想環境の不要なファイルを削除して、ファイルサイズを最適化します。
作業手順としては
・仮想環境のディスクの空き容量を0で埋める
・VMDK形式からVDI形式のディスクを複製
・仮想環境のディスクを圧縮
・作成したディスクを紐付け
・不要になった元のディスクを削除
こんな感じ。

仮想環境のディスクの空き容量を0で埋める

vagrant ssh で仮想環境に接続して、以下のコマンドでディスクの0埋めを実行。

$ dd if=/dev/zero of=zero bs=4k; rm zero

VMDK形式からVDI形式に変更

vagrant で仮想環境を作るとVMDK形式で作られるのだけど、これだとディスクを圧縮させることができないので、VDI形式に変換します。デフォルトでVDIにするオプションとかないのだろうか。。
先ほど接続した仮想環境を vagrant halt で止めた上で、VirtualBoxのディスクのリストを取得。
該当のディスクを確認して、それをVDI形式でコピー。

$ vboxmanage list hdds
UUID: b6e9239d-680c-4dec-973c-2ec51d6b1000
Parent UUID: base
State: created
Type: normal (base)
Location: /path/to/box-disk001.vmdk
Storage format: VMDK
Capacity: 65536 MBytes
Encryption: disabled

$ vboxmanage clonehd b6e9239d-680c-4dec-973c-2ec51d6b1000 /patu/to/box-disk001.vdi --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: b9fb9580-6bb2-4e90-8612-99d5f68fd544

仮想環境のディスクを圧縮

VDI形式で作成したディスクを以下のコマンドで圧縮。

$ vboxmanage modifyhd /path/to/box-disk001.vdi --compact
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

作成したディスクを紐付け

仮想環境の情報を取得して、先ほど作成したディスクを紐付け。
マシンによってSATA ControllerではなくIDE Controller だったりするので、確認をして作業をしてください。

$ vboxmanage list vms
"vccw.test" {57fc230d-f0b3-42b2-b3fe-815848b73af5}

$ vboxmanage showvminfo 57fc230d-f0b3-42b2-b3fe-815848b73af5
...
Storage Controller Name (0):            IDE Controller
...
SATA Controller (0, 0): /path/to/box-disk001.vmdk (UUID: b6e9239d-680c-4dec-973c-2ec51d6b1000)
...

$ vboxmanage storageattach 57fc230d-f0b3-42b2-b3fe-815848b73af5 --storagectl 'SATA Controller' --port 0 --device 0 --type hdd --medium /path/to/box-disk001.vdi

不要になった元のディスクを削除

接続ができたかどうか、仮想環境を立ち上げて見て確認。大丈夫そうなら不要になった元のディスクを削除します。

$ vboxmanage closemedium disk b6e9239d-680c-4dec-973c-2ec51d6b1000 --delete

これで完了。ディスクの空きが増えて、無事TimeMachineへのバックアップができるようになりました。