100ページを超えるPDFファイルを検索して、UNIX / LINUX端末から特定のディレクトリに移動しようとしています。このような:
find . -name '*.pdf' -pagenumber>100 -exec mv -t ~/directory
明らかに、-pagenumber>100
これは正しいコマンドではありません。特別な命令がありますか?
ベストアンサー1
ここで難しいのは、PDF文書のページ数を数えることです。
ユーティリティfind
自体ではこれを行うことができないため、これを行うには外部ツールが必要です。
ほとんどのUnixシステムではインストールできますexiftool
。このツールはlibimage-exiftool-perl
UbuntuとOpenBSDパッケージの一部ですp5-Image-ExifTool
。 PDF文書のページ数を出力するなど、メディアファイルのメタデータに関連する多くのタスクを実行できます。
$ exiftool -s3 -PageCount document.pdf
10
これを使用して、find
100ページを超える文書を別のディレクトリに移動できます。
mkdir -p ~/tmp/100-plus-pages || exit
find . -name '*.pdf' -type f -exec sh -c '
for pathname do
if [ "$(exiftool -s3 -PageCount "$pathname")" -gt 100 ]; then
mv "$pathname" ~/tmp/100-plus-pages
fi
done' sh {} +
これは、見つかったPDFファイルのバッチの短いインラインスクリプトを呼び出します。インラインスクリプトは、見つかったファイルの現在の配置を繰り返し、exiftool
各ファイルに対してコマンドを実行します。コマンドで出力された数字が100を超えると、ファイルはディレクトリに移動100-plus-pages
します~/tmp
。
私たちはターゲットディレクトリからPDFファイルを検索するのを避けたいので、以下にそのディレクトリを作成することを選択しました~/tmp
(検索場所とは別のものですが、find
同じファイルシステムにあることを望むかもしれません)。現在のディレクトリに保存するには、次のように入力を避けることもできます。
mkdir -p 100-plus-pages || exit
find . -path ./100-plus-pages -prune -o -name '*.pdf' -type f -exec sh -c '
for pathname do
if [ "$(exiftool -s3 -PageCount "$pathname")" -gt 100 ]; then
mv "$pathname" 100-plus-pages
fi
done' sh {} +
mv
まず、置換を使用してテストを実行することもできますecho
。