Linux
在 UNIX/LINUX 終端中搜尋超過 100 頁的 PDF 文件並將它們移動到目錄中
我正在嘗試搜尋超過 100 頁的 PDF 文件,然後將它們移動到 UNIX/LINUX 終端中的特定目錄中。有點像這樣:
find . -name '*.pdf' -pagenumber>100 -exec mv -t ~/directory
顯然
-pagenumber>100
不是正確的命令。是否有特定的命令?
這裡的難點是計算 PDF 文件的頁數。
該
find
實用程序無法自行執行此操作,因此我們需要一個外部工具來執行此操作。在大多數 Unix 系統上,您將能夠安裝
exiftool
. 該工具是libimage-exiftool-perl
Ubuntu 和p5-Image-ExifTool
OpenBSD 上的軟體包的一部分。它能夠做很多與媒體文件中的元數據相關的事情,例如輸出 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
。