ファイル名順にソートしてzipファイルを作成する

自炊した書籍をzipで作成する際、普通に圧縮すると変な順番で格納されてしまう。 実用上ほとんど問題はないのだが、なんとなくファイル名順に格納したかったので、そのやり方をメモ。

ls -1 ディレクトリ名 | zip -@rjDo0 圧縮ファイル名.zip

やっていることは

  1. lsに-1オプションをつけてファイル1行ずつでファイル名を出力(デフォルトでは文字コード順)
  2. zipに-@オプションをつけ、標準入力にファイル名を渡して圧縮(残りのオプションはお好みで)

findを使って行うときは、もう少し工夫が必要で、以下のように findの-print0オプションとsortの-zオプション、xargsの-0オプションでNull文字区切りでファイル名を出力→ソート→圧縮とする。

find ./ -type f -print0 | sort -z | xargs -0 zip -@rjDo0 圧縮ファイル名.zip

なんとなくAndroidのPerfectViewerで見るときに表示が早くなったような気がする。たぶんプラシーボだけれど。