Gefundene Stichworte an Dateiname hängen

fox78

fox78

Aktives Mitglied
Thread Starter
Dabei seit
02.02.2004
Beiträge
2.784
Reaktionspunkte
366
Hallo,
ich benötige Euren Rat, wie ich am einfachsten diese (einfache) Aufgabe lösen kann:

Ich habe eine Vielzahl an Textdateien, die ich nach vielen Stichwörtern (ebenfalls aus einer Textdatei) durchsuchen möchte. Die Dateinamen der durchsuchten Texte sollen um alle darin gefunden Stichworte ergänzt werden.

Der händische Weg wäre die Suchworte einzeln mit Spotlight auf dem Ordner mit den Dateien abzuklappern und die Ergebnisse jeweils nach Better Rename zu geben.

Ich selbst habe nur ein paar Grundkenntnisse aus dem Studium bzgl. programmieren aber derzeit auch keine IDE installiert. D.h. ich möchte möglichst mit Automator/Skripteditor oder CodeRunner zurechtkommen.

Welche Herangehensweise könnt ihr mir empfehlen?

fox78
 
Du weißt schon das die Dateinamenlänge begrenzt ist?
Gruß
win2mac
 
:) Ja, ist mir bekannt.

Ich rechne mit maximal 10 gefunden Stichwörtern, die im Schnitt 8 Zeichen haben. Die ursprüngliche Länge der Dateinamen liegt bei max. 100 Zeichen.
 
ich würde das als bash script realisieren (voraussetzung: reine textfiles).
Code:
#!/bin/bash
#set -vux
#
# keyword-rename
# (c) Olivetti
#

[[ ! -f "${1}" ]] || [[ -z "${1}" ]] || [[ "${1}" = "-h" ]] && echo "Syntax: ${0##*/} filename [keywordfile]" && exit 1

filename="${1}"

keywordfile="${2:-keyword.txt}"

f_name="${filename%.*}"
f_ext="${filename##*.}"
list=""

for word in $(cat "${keywordfile}")
 do
  result=$(grep -om1 "${word}" "${filename}") && list="${list}_${result}"
  #echo "${word} -> ${result}"
 done

echo "${filename}: ${list}"

[[ -z "${list}" ]] && { echo "Nothing to do."; exit 2; }

filename_new="${f_name}${list}.${f_ext}"
[[ "${filename}" != "${filename_new}" ]] && mv -v "${filename}" "${filename_new}"
Syntax: keyword-rename filename keyword.txt

für tests einfach ein echo vor's mv in der letzten zeile einfügen: "... && echo mv -v ..."
 
Zuletzt bearbeitet:
Danke für den Tipp und den Code, das probiere ich mal aus.
 
ergänzung (weil ich oben nicht mehr editieren kann):

der aufbau der keyword.txt ist »ein keyword pro zeile«.
wenn keyword.txt im selben verzeichnis wie das script liegt, muss keyword.txt nicht angegeben werden.
 
Super, danke. Das ist für mich ein guter Startpunkt. Jetzt schaue ich mal, wie ich das evt. mit Automator zu einem Dienst machen kann, der eine Mehrfachauswahl nacheinander bearbeitet. Und ich möchte eine if-Abfrage einbauen, damit doppelt gefundene Stichwörter nur einmal angehangen werden.
 
"grep -om1" streicht doppelte keyword-fundstellen schon zusammen.
aber evtl. sind in deiner keyword.txt stichworte doppelt vorhanden.

das kannst du umgehen mit (sortieren und vereinzeln)
Code:
for word in $(cat "${keywordfile}" | sort -u)
 
Zurück
Oben Unten