この形式で名前が付けられた何千ものPDFファイルがあります。
Author Year Title of the book
最初の2つのスペースは関連しています。著者、年、タイトルを区別します。タイトルには複数のスペースを含めることができます。書くスクリプトを探しています。作家到着作家PDFのメタフィールド、タイトル間、年ごとのメタデータ。 Exiftoolは私が見たすべてのツールの中で最も有望なようです。
助けてください?
答え1
一部のEXIF操作ツールには、EXIFデータに基づいてファイル名を変更する方法が組み込まれていますが、これを逆にするツールは見たことがありません。したがって、シェルにファイル名の正しい部分を使用してプログラムを呼び出すようにしてください。これは1つのファイルのみを処理するスクリプトです(名前をスクリプトに唯一の引数として渡します)。
#!/bin/sh
title=${1##*/}
author=${title%% *}; title=${title#* }
year=${title%% *}; title=${title#* }
exiftool -Author="$author" -Title="$title" -CreateDate="$year" "$1"
説明: 私が使うパラメータ拡張構造いくつかの基本的な文字列操作を実行します。デフォルト名(最後の名前の後に/
)を最初のスペースの前に置き、そのtitle
部分を削除します。author
title
ディレクトリ内のすべてのファイルを処理するには、このコードをループに入れます。
#!/bin/sh
for filename in *\ *\ *.pdf; do
title=${filename##*/}
author=${title%% *}; title=${title#* }
year=${title%% *}; title=${title#* }
exiftool -Author="$author" -Title="$title" -CreateDate="$year" "$filename"
done
ディレクトリとそのサブディレクトリ内のすべてのファイルを再帰的に処理するにはfind
。
find /path/to/top/directory -name '* * *.pdf' -type f -exec sh -c '
for filename do
…
done
' _ {} +