SoftwareDesign総集編購入/スクリプトを書いてもうちょっと便利に
久々のブログ投稿です。Loud Twitterに荒らされていた(自分で設定していたんだけど。。)エントリはすっきり削除して、ぼちぼちテーマを決めてエントリを書いていこうと思います。
さてさて、タイトル通り、SoftwareDesignの総集編を買いました! 過去の記事を検索できるのは大変便利で、とりあえずiPhoneにつっこんでGoodReaderで常駐先でも読んでいます。
Software Design 総集編 【2000~2009】(DVD付)
- 作者: SoftwareDesign 編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2010/02/17
- メディア: 大型本
- 購入: 42人 クリック: 452回
- この商品を含むブログ (39件) を見る
ただ、ファイル名がこんな感じなのがイマイチ不便よね。
と言うわけで「元のファイル名_タイトル.pdf」の形に10年分まとめてリネームしてくれるようなスクリプトを書いてみました。sedで上手く抜けなかったので、何故かrubyでゴリ押してます。そしてたぶんMacOSX10.4以上でしか動きません。
#!/usr/bin/ruby -Ku require 'find' # # PDFプロパティの「タイトル」を取得する。 # def getPDFTitle( pdfFileName ) # NOTICE: たぶん、MacOSX依存のコマンド result = `mdls -name kMDItemTitle #{pdfFileName}` if result !~ /.*null.*/ then title = result.scan(/".*"/)[0].gsub('"', '').gsub('/','/') else title = "" end return title end # # リネーム対象のファイルリストを取得する。 # def getFileList( pathName ) fileList = [] Find.find( File.expand_path( pathName )){ |path| # 拡張子.pdfのファイルをリストに格納 fileList.push path if File::extname( path ) == ".pdf" } return fileList end if __FILE__ == $0 then targetDir = ARGV[0] if targetDir == nil then puts "Usage: ruby -Ku pdf_rename.rb target_dir" exit end fileList = getFileList( targetDir ) fileList.each{ |path| begin toName = File::dirname( path ) + "/" + File::basename( path ).delete(".pdf") + "_" + getPDFTitle( path ) + ".pdf" File.rename( path, toName ) rescue puts "ERROR: Rename failed " + path end } end
動き
- 引数に指定したディレクトリ以下のPDFファイルを再帰的に探査します。
- 引っかかったPDFファイルを軒並み「元のファイル名_タイトル.pdf」の形に変換します。
- 上手くいかなかったらそのファイルだけ諦めます。
※サブディレクトリも対象になるので注意して下さい。
使い方
上のスクリプトをpdf_rename.rbみたいな名前で保存して、以下のようにぽちっとなして下さい。
ruby -Ku pdf_rename.rb /PDFを保存しているディレクトリ名をフルパスで
するとこんな感じになります。
MacOSX依存の理由
mdlsというコマンドを利用してファイルのメタデータを取得しています。
いろいろ表示されるんですが、「-name プロパティ名」とオプションを指定すると、指定したプロパティだけ出力できます。
で、sedかなんかでダブルクォーテーションの中身を抜けばタイトルが取得できるという寸法です。
でも、何故かsedで上手くいかなかった
mdls -name kMDItemTitle Keynote09_UserGuide_J.pdf | sed -e 's/.*"\(.*\)".*/\1/'
こんな感じでタイトルだけ抜ける予定だったのですが、何故か処理が固まってしまい、ついカッとなってRubyで書いちゃいました。
echo 'kMDItemTitle = "hogehoge"' | sed -e 's/.*"\(.*\)".*/\1/' # => hogehoge
って感じで上手く行くんですけどね。もしやタイトルの中にシングルクォーテーションとか入ってるとダメなのかしら。
総括
SoftwareDesign総集編はコストパフォーマンス最強すぎるので、買えば良いと思います!