Odpowiedzi:
Być może uruchomienie pdfinfo
(tutaj w Fedorze w poppler-utils
pakiecie) daje wskazówkę?
Większość informacji na temat pliku PDF znajduje się na końcu w słowniku, więc jeśli go znajdzie, powinno być OK. Zrobiłbym coś takiego:
for f in *.pdf; do
if pdfinfo "$f" > /dev/null; then
: Nothing
else
echo "$f" is broken
fi
done
pdfinfo
czy pdftotext
...
To jest mój skrypt
find . -iname '*.pdf' | while read -r f
do
if pdftotext "$f" &> /dev/null; then
echo "$f" was ok;
else
mv "$f" "$f.broken";
echo "$f" is broken;
fi;
done
Moim wybranym narzędziem do sprawdzania plików PDF jest qpdf
. qpdf
ma --check
argument, który dobrze sprawdza się w wyszukiwaniu problemów w plikach PDF.
qpdf
:qpdf --check test_file.pdf
qpdf
:find ./directory_to_scan/ -type f -iname '*.pdf' \( -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; -o -exec echo "{}": FAILED \; \)
Objaśnienie polecenia:
find ./directory_to_scan/ -type f -iname '*.pdf'
Znajdź wszystkie pliki z rozszerzeniem „.pdf”
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;
Wykonaj qpdf
dla każdego znalezionego pliku i potokuj wszystkie dane wyjściowe do /dev/null
. Wydrukuj także nazwę pliku, a po nim „: OK”, jeśli zwracany status qpdf
to 0 (tzn. Brak błędów)
-o -exec echo "{}": FAILED \; \)
Wykonuje się to, jeśli zostaną znalezione błędy: Wydrukuj nazwę pliku, a następnie „: AWARIA”
qpdf
:qpdf
ma pliki binarne dla systemu Linux i Windows dostępne na stronie : https://github.com/qpdf/qpdf/releases . Możesz także użyć swojego menedżera pakietów, aby go zdobyć. Na przykład na Ubuntu możesz zainstalować qpdf za pomocą apt z poleceniem:
apt install qpdf
Dostałem odpowiedź:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
Pliki PDF z błędami będą wyświetlać błędy.
ls
: mywiki.wooledge.org/ParsingLs
find (1)
. :-)
Wszystkie metody wykorzystujące pdfinfo
lub pdftotext
nie działały dla mnie. W rzeczywistości ciągle podawali mi fałszywe wyniki i czasami tworzyli pliki, których nie potrzebowałem.
To, co zadziałało, to JHOVE .
Instalacja:
Zainstaluj słoik z powyższego łącza i zaktualizuj zmienną środowiskową PATH za pomocą tego polecenia:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Odśwież każdy terminal za pomocą
source ~/.bash_profile
i możesz zacząć korzystać z niego w całym systemie.
Podstawowe użycie:
jhove -m pdf-hul someFile.pdf
Otrzymasz wiele informacji o pliku pdf - więcej niż większość osób prawdopodobnie potrzebuje.
Bash One-Liner:
Zwraca valid
lub invalid
:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
Zauważ, że to zostało uruchomione na Mac OS X, ale zakładam, że działa tak samo z każdym środowiskiem Bash opartym na Uniksie.