私はpdfファイルを次のように1つずつテキストファイルに変換できることを知っています:
$ pdftotext filename.pdf
しかし、すべてを変換するために個別のファイル名を指定せずにその変換を行う単一のコマンドはありますか?
私はここでウィキペディアで、「複数のファイルを変換するためのワイルドカード(*)、たとえば$ pdftotext * pdfは使用できません。なぜならpdftotextは1つのファイル名しか期待しないからです」
私はpdfファイルを次のように1つずつテキストファイルに変換できることを知っています:
$ pdftotext filename.pdf
しかし、すべてを変換するために個別のファイル名を指定せずにその変換を行う単一のコマンドはありますか?
私はここでウィキペディアで、「複数のファイルを変換するためのワイルドカード(*)、たとえば$ pdftotext * pdfは使用できません。なぜならpdftotextは1つのファイル名しか期待しないからです」
回答:
以下は、現在のディレクトリ内のすべてのファイルを変換します。
for file in *.pdf; do pdftotext "$file" "$file.txt"; done
ls *.pdf | xargs -n1 pdftotext
xargs
多くの場合、同じコマンドを複数回実行し、毎回わずかな変更を行うための迅速なソリューションです。この-n1
オプションは、一度に1つのpdfファイルのみがpdftotextに渡されるようにします。
編集:ファイル名などにスペースが心配な場合は、この代替手段を使用できます。
find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
ls *.pdf | xargs -L1 -I% pdftotext % %.txt
bashスクリプトを書く
for f in *.pdf; do
pdftotext "$f"
done
または、次のように1行のコマンドで入力します。
for f in *.pdf; do pdftotext "$f"; done
これがお役に立てば幸いです。これをテストするための.pdfの大規模なグループはありませんが、この戦略を使用して、.flacファイルを.oggファイルに変換します。
最初にサムとライアン・トンプソン、そして他のすべての回答者に感謝しなければなりません。ここでの私の答えは、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つ()に 置き換えると、問題は回避されます。
しかし、特定のケースでは、ライアンのソリューションが何をするかを正確に望むかもしれません!
find
を使用すると、サブディレクトリでのコマンド検索を回避でき-maxdepth 1
ます。Thunarではのカスタムアクションの機能の中にそれを入れたときにも、あなたはおそらく交換する必要がありますfind .
とfind %F
Thunarではが適切に選択したディレクトリのパスを渡すことができるようにします。