staging.inyokaproject.org

Script zum Bearbeiten von Dateien eines bestimmten Typs in allen Unterverzeichnissen

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

nordlicht_SH

Anmeldungsdatum:
2. Januar 2023

Beiträge: Zähle...

Hallo liebe Ubuntuuser,

ich beschäftige mich erst seit recht kurzer Zeit mit Linux und der Shell und benötige ein Bash-Script, um in einem angegebenen Verzeichnis inkl. aller Unterverzeichnisse alle vorhandenen PDF-Dateien zu bearbeiten. Mein Anwendungsfall ist, dass ich über Jahre Dateien nur als Bilder gescannt habe und nun mit ocrmypdf einen Textlayer hinzufügen möchte. Meine Dateien liegen auf einem NAS, das ich per mount eingebunden habe.

Ich habe durch Ausprobieren und iterative Anpassung meine Lösung nun so weit hinbekommen, dass ich in dem angegebenen Verzeichnis alle PDF-Dateien verarbeiten kann. Unterverzeichnisse werden nicht berücksichtigt (das erwarte ich beim u.a. Code auch so ☺) und Verzeichnisnamen mit Leerzeichen machen auch Probleme.

Was mir in meiner Lösung also nun fehlt, ist das Einbinden aller Unterverzeichnisse (in beliebiger Tiefe, wobei ich praktisch vermutlich nicht mehr als drei Ebenen habe) und das "Abfangen" bzw. Berücksichtigen von Verzeichnissen, die ein Leerzeichen im Namen haben.

Bei meiner Suche nach einer Lösung habe ich Ansätze mit find und einer "if"-Abfrage zum Dateitypen gesehen, bekomme das aber nicht so hin, dass es bei mir funktioniert.

Ich gehe davon aus, dass mein Anwendungsfall vom Prinzip her (mache etwas mit allen Dateien eines bestimmten Typs in einem Verzeichnis inkl. aller Unterverzeichnisse) relativ gängig ist, komme aber trotzdem nicht weiter.

Daher bin ich für Hinweise zur Lösung sehr dankbar!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/bash
# Test whether command-line argument is present (non-empty)
if [ -n "$1" ]
# if command-line argument is present, use argument for dir
then
  dir=$1
# else exit
else
  exit 0
fi  
# for every file in the given dir
for file in $dir/*.pdf ;
do 
	ocrmypdf -d -s -l deu "$file" "$file"
done
exit 0

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Herzlich willkommen hier im Forum!

Das sollte recht einfach gehen:

1
2
3
4
5
6
7
8
#!/bin/sh

if [ ! -d "$1" ]; then
  echo "ERROR: need a directory." >&2
  exit 1
fi

find "$1" -type f -iname '*.pdf' -exec ocrmypdf -d -s -l deu {} {} \;

nordlicht_SH

(Themenstarter)

Anmeldungsdatum:
2. Januar 2023

Beiträge: 2

Hallo,

danke für die Hilfe, so klappt es! 👍

Schon ziemlich cool und beeindruckend, was mit recht wenig Code so möglich ist...

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Hallo nordlicht_SH, willkommen im Forum!

Falls das Thema damit erledigt ist, setze es bitte noch auf gelöst.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

nordlicht_SH schrieb:

danke für die Hilfe, so klappt es! 👍

Bitte!

Schon ziemlich cool und beeindruckend, was mit recht wenig Code so möglich ist...

Ja, die Unix-Philosophie mit diesen ganzen Kommandos, die man mit der Shell zusammenstöpselt, ist schon sehr mächtig.

Antworten |