ファイル転送準備

作成理由

  • android端末にパソコンからテキストファイルを転送したい

仕様を詰める

  • フォルダ以下の日本語ファイル名のテキストを探す
  • 同一のファイル名がある場合は更新日時が新しい方を転送する
  • ファイル転送には abd コマンドを使う
  • 転送先のフォルダはあらかじめ準備しておく
  • いったんバッチファイルに書き出してから実行する

バッチファイル

REM ファイル転送準備.bat

ruby -x "%~f0"
goto end

#!ruby
#encoding: utf-8
Encoding.default_external = 'UTF-8'

$stdout=open("tmp.txt","w")
$stderr=open("tmp.log","w")

h,s={},""

Dir.glob('**/*'){|f|
  if %r|/[\p{Han}ぁ-んァ-ヴー0-9]*.txt$|=~f
    if h[File.basename(f)].nil?
      h[File.basename(f)]=f
    elsif File.mtime(f)>File.mtime(h[File.basename(f)])
      h[File.basename(f)]=f
    end
  end
}
h.each{|k,v| puts k+"=>"+v}
h.each{|k,v| s+=%Q|adb push "#{v}" "/sdcard/aozora/#{k}"\n|}

File.write("tmp.bat",s)
__END__
:end

注意点

  • ruby 2.6.5p114 にて動作確認してます

追記

  • 読み返してみるとifが多くって格好悪いって思ってちょっと修正
REM ファイル転送準備.bat

ruby -x "%~f0"
goto end

#!ruby
#encoding: utf-8
Encoding.default_external = 'UTF-8'

$stdout=open("tmp.txt","w")
$stderr=open("tmp.log","w")

h,s={},""

Dir.glob('**/*'){|f|
  next if %r|/[\p{Han}ぁ-んァ-ヴー0-9]*.txt$|!~f
  if h[File.basename(f)].nil? or File.mtime(f)>File.mtime(h[File.basename(f)])
    h[File.basename(f)]=f
  end
}
h.each{|k,v| puts k+"=>"+v}
h.each{|k,v| s+=%Q|adb push "#{v}" "/sdcard/aozora/#{k}"\n|}

File.write("tmp.bat",s)
__END__
:end

コメント