タイトルでPDFを検索して開くRubyスクリプト
背景
- MacにたくさんのPDFがある。
- その多くは自炊した本で、決まったディレクトリにまとめて置いてある。
問題
解法
- ファイル名を入れたら決まったディレクトリからそのファイル一覧を見せるRubyスクリプトを使う。
詳細
#!/usr/bin/env ruby
DIRECTORY = '/YOUR/PDF/DIR'
keyword = nil
number = nil
if ARGV.length != 1 and ARGV.length != 2
puts "Usage (1): book keyword"
puts "Example (1): book Galois"
puts "Usage (2): book keyword number"
puts "Example (2): book Galois 3"
abort
end
keyword = ARGV[0]
number = ARGV[1].to_i if ARGV.length == 2
list = `ls #{DIRECTORY} | nkf --ic=UTF-8-MAC --oc=UTF-8 | grep '#{keyword}' | sort`.split(/\n/)
if number and number < list.size
system("open '#{DIRECTORY}/#{list[number]}'")
else
list.each_with_index do |path, index|
puts "#{index}: #{path.sub(/#{DIRECTORY}\//, '')}"
end
end
使用例
- ファイル名の一部を入力すると一覧を番号付きで表示する。
$ ruby book.rb Galois
0: Galois AAAAAAA
1: BBBB Galois BBBB
2: CCCC Galois CCCC
$ ruby book.rb Galois 2
(CCCC Galois CCCCを表示する)
参考
- 以前はMac専用の
mdfind
というツールを使っていた。
mdfind -name foo -onlyin Dropbox
で、Dropbox以下にある、ファイル名にfooを含むファイル一覧が超高速で表示される。
mdfind
はSpotlightの情報を使っているらしいのでfind
で探すよりもずっと早い。
mdfind -onlyin Dropbox "kMDItemTextContent=='Galois'"
だと、Galois
を内容として含むファイルを見つけるらしい。
- でも、このままだと、たとえば「ボイヤー」のように濁点が付いているものがうまく扱えない。これはMacのファイルシステムのUnicodeの取り扱い上の問題であるので、上記では
mdfind
を使っていない。