ノートを Evernote に移動しています。そのためには、.doc/.docx ファイルを rtf に変換する必要があります。その理由は、rtf を Evernote にインポートするスクリプトがあるからです。ただし、.doc/.docx ファイルの中には画像が含まれているものもあります。
すべてを表示せずに、どの .doc/.docx ファイルに画像が含まれているかを識別する方法はありますか? 数千のファイルがあります。この方法を使用すると、画像が含まれているいくつかのファイルを開き、コンテンツ全体を Evernote に直接コピー/貼り付けることができます。
OS X 10.6.8 を使用していると記載する必要があります。
答え1
.doc ファイルでは画像はどこに保存されますか?
Worddoc
ファイルは実際には圧縮されてからコンテナ形式にまとめられます。メディアは、このコンパイルされたファイル形式のどこかに保存されます (おそらくdoc
形式のヘッダーの直後)。画像データの後には、実際のドキュメントが zip 互換のフォルダーとして保存されます。
したがって、ファイルを解凍しようとするとdoc
、先頭に余分なバイト数が発生します。これらは画像 (およびフォーマット ヘッダー) です。これでunzip
、ファイルにアクセスして余分なバイト数を確認できます。
charon:test werner$ unzip -c images.doc > /dev/null
warning [images.doc]: 47166 extra bytes at beginning or within zipfile
charon:test werner$ unzip -c noimages.doc > /dev/null
warning [noimages2.doc]: 6060 extra bytes at beginning or within zipfile
テストを通じて、「プレーンテキスト」の Word 文書のヘッダーは 6060 バイトの大きさであることがわかりました (ただし、一部はもう少し大きいです)。これを利用して、文書内に画像があるかどうかを判断できます。実際の画像は間違いなく数 KB 以上あるため、8000 バイトとしましょう。
.docx ファイルはどうですか?
Office 2007 形式 ( docx
) では、これははるかに簡単です。これらは実際に圧縮されたファイルであり、あらゆる種類の埋め込みメディア (画像、ビデオ) を含むすべての Word ファイルにはディレクトリが含まれますfile.docx/word/media
。したがって、docx
ファイルを解凍して、そのディレクトリが存在するかどうかを確認するだけです。
画像をチェックするスクリプト
新しい空のファイルを作成し、名前を付けて
docx-images.rb
、次のコンテンツを貼り付けます。#!/usr/bin/env ruby require 'open3' TEMPDIR = "/tmp/word/" # check for docx files Dir.glob("**/*.docx").each do |file| system("rm -rf '#{TEMPDIR}'") system("unzip '#{file}' -d #{TEMPDIR} > /dev/null") if File.directory?("#{TEMPDIR}/word/media/") puts file end end # check for doc files Dir.glob("**/*.doc").each do |file| stdin, stdout, stderr = Open3.popen3("unzip -c '#{file}' > /dev/null") info = stderr.readlines[0] info = info.gsub(" extra bytes at beginning or within zipfile", "").gsub(/warning\s\[.*\]:\s+/, "") if info.to_i > 8000 # assume a little more than usual header size puts file end end
どこかに保存します。できれば、ファイルの検索を開始するフォルダー
docx
、たとえば自分のDocuments
フォルダーに保存します。さあ、開けてターミナル.app、そして
cd ~/Documents
そこに行くのに使います。と入力すると、フォルダを
ruby docx-images.rb
再帰的にスキャンして、およびファイルを探します。前者は に解凍され、埋め込みメディアが含まれているかどうかが確認されます。後者は に解凍されるだけなので、痕跡は残りません。Documents
docx
doc
/tmp/word
/dev/null
埋め込まれたメディアのリストが表示されます。
証拠
これが機能することを証明するために、4 つのファイルを作成しました。1 つは画像付き、もう 1 つは画像なしです。どちらも およびdoc
ですdocx
。
次に、スクリプトを実行します。
charon:test werner$ ruby docx-images.rb
images.docx
images.doc
明らかに、スクリプトは、そのmedia
フォルダ内の実際の画像をチェックするように改善できますが、ファイルに実際にメディアが含まれていない限り、画像が存在する可能性は低いです。「6060」バイトのチェックについても同様です。これはハックですが、私の場合はうまくいきます。
もちろん、スクリプトはunzip
それぞれのシステムの実装に依存しますが、OS X バージョンでは機能します。
答え2
のためにウィンドウズ:
- .docx の名前を .zip に変更し、zip ファイルを開いて画像を抽出します (最善の方法です)。
\zipfile\word\media
次に、画像の下にある画像を探します。