100ページを超えるPDFファイルを検索して、UNIX / LINUX端末のディレクトリに移動します。

100ページを超えるPDFファイルを検索して、UNIX / LINUX端末のディレクトリに移動します。

100ページを超えるPDFファイルを検索して、UNIX / LINUX端末から特定のディレクトリに移動しようとしています。このような:

find . -name '*.pdf' -pagenumber>100 -exec mv -t ~/directory

明らかに、-pagenumber>100これは正しいコマンドではありません。特別な命令がありますか?

ベストアンサー1

ここで難しいのは、PDF文書のページ数を数えることです。

ユーティリティfind自体ではこれを行うことができないため、これを行うには外部ツールが必要です。

ほとんどのUnixシステムではインストールできますexiftool。このツールはlibimage-exiftool-perlUbuntuとOpenBSDパッケージの一部ですp5-Image-ExifTool。 PDF文書のページ数を出力するなど、メディアファイルのメタデータに関連する多くのタスクを実行できます。

$ exiftool -s3 -PageCount document.pdf
10

これを使用して、find100ページを超える文書を別のディレクトリに移動できます。

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

おすすめ記事