つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

findコマンドで大量のファイル処理の自動化

 大量のファイルを処理対象とするとき、Linuxシェルスクリプトが便利です。
 シェルスクリプトを書くことができれば、一つ一つの手作業は不要で、どんなに大量のファイルであろうと、自動的に処理してくれます。

 よく利用される構文がfor文で、指定した回数だけ、同じ処理を繰り返します。どんなに大量の処理を命じても、文句一つ言わずに、また一つのミスも起こさず、プログラムされたとおりに律儀にやってのけます。




 
 そのfor文の書式(構文)は、以下のとおりです。

 for (変数) in (リスト) 
 do 
   (繰り返し処理) 
 done 



 for文による繰り返し処理の一例は、
  ⇒ こちらの記事をご覧ください。



 上記のリストの箇所には、半角スペース区切りの固定文字列を並べる方法のほかに、パス名展開も利用できます。
 パス名展開は、アスタリスク(*)やクエスチョン(?)を使って記述することで、複数のファイル名に置き換えてくれるシェルの機能です。

 そのパス名展開も便利でいいのですが、もう一つ、私が便利だなぁって思っているのが、findコマンドを使う方法です。

 findコマンドの書式は、
  find (検索開始ディレクトリ) (検索条件) (アクション)
です。
 検索開始ディレクトリを起点として、検索条件を満たすファイルを探し、アクションを実行します。

 検索条件を自由に指定できるから、処理したい対象ファイルを任意に選ぶことができます。
 この方法によって、大量のPDFファイルすべてに、パスワードを設定したことがあります。
 
 その記事は ⇒ こちらをご覧ください。

 参考までに、そのときのシェルスクリプトを再掲します。

#!/bin/bash

# PDFファイルに設定するパスワード
 password="HOGEHOGE"

# ディレクトリ内のPDFファイルのリストを取得
 pdf_files=$(find /home/goosyun/ドキュメント -type f -name "*.pdf")

# ループを使用して各PDFファイルにパスワードを設定
 for file in $pdf_files; do

# ファイル名を取得
 filename=$(basename "$file")

# パスワード設定済みPDFファイルの出力先を指定
 output_file="/home/goosyun/ドキュメント/PasswordPDF/${filename%.pdf}_protected.pdf"

# PDFtkを使用してパスワードを設定
 pdftk "$file" output "$output_file" user_pw "$password"

# 作業完了のメッセージ表示
 echo "パスワードを設定しました: $output_file"

done


 シェルスクリプトに関しては、まだまだ初学者の段階だと思うのですが、それでも、一通りの記述ができるようになって、処理自動化の恩恵に浴しています。

 残念に思えるのは、こんなにも便利なのに、なぜもっと若いうちに関心が向かなかったのだろうか、ということです。初老のこの年になって身につけても、宝の持ち腐れですわな。




それでは、また次の記事で
goosyun