1つのコマンドですべてのpdfファイルを(フォルダー内の)テキストに変換する方法は?


18

私はpdfファイルを次のように1つずつテキストファイルに変換できることを知っています:

$ pdftotext filename.pdf

しかし、すべてを変換するために個別のファイル名を指定せずにその変換を行う単一のコマンドはありますか?

私はここでウィキペディアで、「複数のファイルを変換するためのワイルドカード(*)、たとえば$ pdftotext * pdfは使用できません。なぜならpdftotextは1つのファイル名しか期待しないからです」

pdf  text  convert  batch 

回答:


23

以下は、現在のディレクトリ内のすべてのファイルを変換します。

for file in *.pdf; do pdftotext "$file" "$file.txt"; done

その唯一のコマンドは、ターミナル(opはを求めたものです1行構文、ループのための内部のpdftotext)に1行で入力することができます
サム・

forループの仕組みの詳細については、次のリンクを参照してください。cyberciti.biz / faq / bash
Sam

これは非PDFファイルで問題を引き起こしませんか?
-cprofitt

これは、「filename.pdf.txt」のようなファイルを生成しませんか?
ライアンC.トンプソン

はい、それが問題である場合、「sed」または「awk」を使用して.pdf拡張子を削除できますが、コマンドが複雑になります
Sam

8
ls *.pdf | xargs -n1 pdftotext

xargs多くの場合、同じコマンドを複数回実行し、毎回わずかな変更を行うための迅速なソリューションです。この-n1オプションは、一度に1つのpdfファイルのみがpdftotextに渡されるようにします。

編集:ファイル名などにスペースが心配な場合は、この代替手段を使用できます。

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext

私の答えを参照してください:そのコマンドは、そこに記載されている問題を回避するために適応できますか?これは、あなたの解決策が良くないという意味ではなく、逆に、ここにある他の選択肢ではできない非常に具体的なことをします。しかし、私はちょうど興味があった

2
または:ls *.pdf | xargs -L1 -I% pdftotext % %.txt
ケノーブ14

2

bashスクリプトを書く

for f in *.pdf; do
  pdftotext "$f"
done

または、次のように1行のコマンドで入力します。

for f in *.pdf; do pdftotext "$f"; done

これがお役に立てば幸いです。これをテストするための.pdfの大規模なグループはありませんが、この戦略を使用して、.flacファイルを.oggファイルに変換します。


手動でパスを挿入する代わりに、そのフォルダー内のターミナルを開いてコマンドを実行することで実行できますか?

ここにそれを貼り付けて、答えに挿入できませんでしたか?それは良い答えでしょう。あなたが投稿したものの一部を削除するだけでは良い公式に到達することができませんでした

最初に提案したfindとxargsは、テストする機会を得たときに機能しませんでした。
cprofitt

1

最初にサムライアン・トンプソン、そして他のすべての回答者に感謝しなければなりません。ここでの私の答えは、Thunarのカスタムアクションにソリューションを追加する可能性に関するバリエーションに過ぎません。

そのため、あらゆるターミナルコマンドと同様に、フォルダー内のすべてのpdfファイルをテキストに変換するコマンドをThunarファイルマネージャーのカスタムアクションのリストに入れることができます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

そこにあるコマンドはfind . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext、(Ryan Thompsonから来ています)それは私が使用したいものですが、厄介なターンがあります...以下を参照してください...

ここに画像の説明を入力してください

ここに画像の説明を入力してください

...これは面白いコマンドであり、注意して使用する必要があります:発射されるフォルダ内のすべてのpdfをテキストに変換するように作られているので、ホームフォルダで誤って発射されると、いくつかの不要な効果:PDFはすべてテキストに変換されます!

(私はこのようにテストしました:デスクトップに "test"というフォルダーを作成し、/Desktop/test/a/b/c/e/f/g/h/iその中に同じpdfを含むpdfファイルと一連のフォルダー()を作成しました。そのコマンドを実行/Desktop/testすると、すべてのpdfが「i」フォルダ。)

(このリスクを回避するためにこのコマンドを調整する方法についてのコメントを歓迎します。)

これをSamfor file in *.pdf; do pdftotext "$file" "$file.txt"; doneからのもう1つ()に 置き換えると、問題は回避されます。

しかし、特定のケースでは、ライアンのソリューションが何をするかを正確に望むかもしれません!


1
findを使用すると、サブディレクトリでのコマンド検索を回避でき-maxdepth 1ます。Thunarではのカスタムアクションの機能の中にそれを入れたときにも、あなたはおそらく交換する必要がありますfind .find %FThunarではが適切に選択したディレクトリのパスを渡すことができるようにします。
ライアンC.トンプソン

0
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

これはsample.pdf.txtを出力します

user2357111317が示唆するように、これを使用してみました。また、テキストのレイアウトを保持するために-layoutを含めました。

for file in *.pdf; do pdftotext -layout "$file"; done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.