Dateien auswählen

Robert9

Member
Registriert
27 Juni 2022
Beiträge
35
Stelle Dir vor, Du hast 1000 Ordner.
In manchen Ordnern liegt eine Datei namexyz.rtf
In manchen Ordnern liegen zwei Dateien mit den Namen namexyz.rtf und namexyz_uebersetzt.rtf

Ich möchte jetzt alle Dateien haben, die keine Übersetzung haben.

Vorgehensweise bisher:

Suche nach *.rtf

Es folgt eine Liste an Dateien. Diese ordne ich nach dem Namen.

Jetzt gehe ich sie einzeln durch und markiere alle, die noch keine Übersetzung haben.

EIne Lösung, die mir eben einfällt, wäre:

Suche *.rtf, älter als gestern (da habe ich angefangen)

Gibt es noch andere Lösungeswege? Möglichst ohne, dass man die Dateien erst woanders hinkopiert (mit anderem Programm, das Regex erlaubt);
denn ich muss die Auswahl ja nachher mit dem Übersetzungsprogramm öffnen und das eben möglichst im originalen Ordner.
 

albert66

Member
Registriert
6 März 2022
Beiträge
40
Wenn es genug Dateien sind, lohnt sich ein kleineres Programm. Ich habe, allerdings unter OS/2 mit REXX, eine Sammlung für solche Hausaufgaben, will ich gelegentlich auf Win umschreiben, gibt dort auch REXX. Python wäre eine Alternative, aber .... müßte ich mich erst einarbeiten.

Vom Ablauf wäre es ein dir *.rtf >xxx Befehl, der den Output xxx anschließend sortiert und dann auf Dupe untersucht. Dabei wird für "_uebersetzt" ein Filter eingebaut. Durch die Sortierung ist es ein simpler 1:1 Vergleich neu vs. letzter Record - mit Einschluß "_uebersetzt". Eigentlich keine große Affaire.

Hat den Vorteil, daß man auf komplette Laufwerke "dir" absetzen kann und auch Dateien in unterschiedlichen Verzeichnissen erwischt -- bei entsprechender Sortierung nur nach dem Dateinamen. Dazu via work-file die Dateinamen auf eine fixe Position schieben.

Den Folgeaufruf zum Übersetzen könntest ebenso easy einbauen.
 
Zuletzt bearbeitet:

schoerg

Active member
Registriert
12 Juni 2009
Beiträge
3.681
Evtl. Sortierung nach "Erstellt am" einstellen? Die du übersetzt hast werden jünger sein wie der Rest. Alle Markieren und dann weiter wie immer du willst.

Alternativ evtl. mit "-" als Präfix suchen.
 

hikaru

Active member
Registriert
1 Okt. 2013
Beiträge
1.311
Welche Werkzeuge stehen dir zur Verfügung?

In den meisten unter Linux verfügbaren Shells (nicht tcsh) sollte das gehen, um die Dateien zu finden:
Code:
find . -name '*.rtf' | grep -v "$(find . -name '*_uebersetzt\.rtf' | sed 's/_uebersetzt\.rtf//')"
 

hikaru

Active member
Registriert
1 Okt. 2013
Beiträge
1.311
1. find statt ls, weil es laut @Robert9 Unterverzeichnisse gibt.
2. "grep -v übersetzt" filtert die Übersetzungen raus, aber nicht die Originale, zu denen es eine Übersetzung gibt. Das macht die find|sed-Pipe indem sie die "Basenames" der Übersetungen filtert und somit Original und Übersetzung erfasst.
Beitrag automatisch zusammengeführt:

Meine erste Lösung hat einen Schönheitsfehler:
Mein String-Matching ist zu ungenau. Wenn es zwei Originale gibt, bei denen der Basename des Einen ein Substring des Basenames des Anderen ist, und Ersteres hat eine Übersetzung, Letzteres aber nicht, dann wird Letzteres nicht in der Liste der unübersetzten Dokumente ausgegeben.

Beispiel:
hallo.rtf und hallo_welt.rtf sind Originale und es gibt die Übersetzung hallo_uebersetzt.rtf, dann wird hallo_welt.rtf nicht als unübersetzt ausgegeben, weil schon hallo_uebersetzt.rtf alle Dokumente von der Liste streicht, die "hallo" im Namen tragen.

Diese Lösung sollte sauber funktionieren:
Code:
find . -iname '*.rtf' ! -iname '*_uebersetzt*' | while read file; do [ -e "$(echo $file | sed 's/.rtf$/_uebersetzt.rtf/')" ] || echo $file ; done
 
Zuletzt bearbeitet:
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen
Oben