Linux

在 UNIX/LINUX 終端中搜尋超過 100 頁的 PDF 文件並將它們移動到目錄中

  • January 16, 2022

我正在嘗試搜尋超過 100 頁的 PDF 文件,然後將它們移動到 UNIX/LINUX 終端中的特定目錄中。有點像這樣:

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

顯然-pagenumber>100不是正確的命令。是否有特定的命令?

這裡的難點是計算 PDF 文件的頁數。

find實用程序無法自行執行此操作,因此我們需要一個外部工具來執行此操作。

在大多數 Unix 系統上,您將能夠安裝exiftool. 該工具是libimage-exiftool-perlUbuntu 和p5-Image-ExifToolOpenBSD 上的軟體包的一部分。它能夠做很多與媒體文件中的元數據相關的事情,例如輸出 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

引用自:https://unix.stackexchange.com/questions/686458