
Ich hatte einige Aufgaben, bei denen ich Berichte über Dateiänderungen in Verzeichnissen von verschiedenen Servern aus erstellen musste. Dabei gelang es mir, die Berichte mit einfachen Unix-Befehlen zu erstellen. Ich habe Folgendes verwendet:
ls -R -lT /Volumes/www/subdir/ | awk '{if ($7=="" ) print $0; else print $11";"$7"/"$8"/"$10;}' > /Users/[username]/Desktop/output.txt
Jetzt muss ich einen Bericht über alle PDF-Dateien erstellen, denen Metadaten fehlen. Ich habe mich gefragt, ob es eine Möglichkeit gibt (ähnlich meiner aktuellen Methode), die Metadaten einer Datei zu überprüfen und nur diejenigen mit fehlenden Metadaten auszugeben. Ich möchte die LS-Ergebnisse in eine Datei umleiten, damit ich die Daten in Excel importieren kann. In meinen anderen Berichten habe ich awk verwendet, um die LS-Ausgabe so zu formatieren, dass sie in Excel importiert werden kann.
Dieser Vorgang wird auf einem Mac durchgeführt. Dabei werden integrierte Befehle der Installation vorgezogen, da ich keine Administratorrechte zum Installieren von Software auf Bürohardware habe.
Aktualisieren: Dieser Bericht wird so geändert, dass er nicht nur PDFs enthält, sondern ich gehe davon aus, dass er in Zukunft auch andere Dateitypen enthalten muss. Ein Bericht kann also einen oder mehrere Dateitypen durchsuchen.
Die Metadaten, die ich jetzt überprüfen muss, sind:
- Titel
- Autor
- Thema
- Schlüsselwörter
Ich habe es geschafft, die Metadaten einer Datei aufzulisten mit:
mdls [path to file]
Dies führt zu einer Liste aller Metadaten. Ich habe es mit einem PDF mit ausgefüllten Metadaten und einem ohne ausgefüllte Metadaten getestet. Mir ist aufgefallen, dass bei den fehlenden Metadaten nicht null zurückgegeben wird, sondern der Metaschlüssel überhaupt nicht aufgelistet wird.
Folgendes versuche ich derzeit:
mdfind -onlyin /Volumes/web/ "kMDItemAuthors == ''"
Wie könnte ich diese Daten verwenden, um die Ausgabe vonls
Aktualisieren: Ich habe es geschafft, einen Bericht zu erhalten, der alle PDFs auflistet, indem ich Folgendes verwendet habe:
ls -R -lT [server directory path] | grep ".[file extension]" | awk '{print $11";"$7"/"$8"/"$10;}' > [output file path]
Einer der Nebeneffekte davon ist, dass ich die rekursive Eigenschaft des ls verliere. Daran arbeite ich noch.
Ich muss auch eine Möglichkeit finden, nur diejenigen herauszufiltern, denen die erforderlichen Metadaten fehlen. Mir wurde auch geraten, dass ich auch einen Bericht über die PDFs erstellen muss, die alle Metadaten enthalten. Ich habe versucht, diesen aktuellen Befehl zu verwenden und die Ausgabe zuerst an mdfind und dann an awk weiterzuleiten, aber ich muss etwas übersehen haben.
Antwort1
VerwendenExiftool.
-T -FilePath
Um den vollständigen Pfad ( ) zu allen Dateien mit der Erweiterung pdf
rekursiv ( -r
) auszudrucken, bei /search/path
denen eines der von Ihnen angegebenen Metadaten leer ist, verwenden Sie:
exiftool -T -FilePath \
-if '$FileTypeExtension eq "pdf"' \
-if '(not $Title) or (not $Author) or (not $Subject) or (not $Keywords)' \
-r /search/path
Passen Sie den Befehl an Ihre zukünftigen Anforderungen an.
Antwort2
Wenn Sie etwas Allgemeineres möchten, müssen Sie ein Programm/Skript erstellen, das die Prüfung für eine Datei durchführt und find(1)
es nacheinander auf allen Zielen ausführen, etwa so:
find . -name "*.pdf" -exec check \;
Dabei stellen Sie sicher, dass check file
immer Erfolg (0) zurückgegeben wird und der Name der fehlerhaften Datei entsprechend gedruckt wird. Oder passen Sie das Obige so an, dass nur Erfolg zurückgegeben wird, wenn die Datei beschädigt ist, und führen Sie Folgendes aus:
find . -name "*.pdf" -exec check \; -print