Sonderzeichen aus Datei/Ordnernamen entfernen

CrashOverload

Neues Mitglied
Thread Starter
Dabei seit
21.08.2008
Beiträge
10
Reaktionspunkte
0
Hi,

ich habe schon gesucht aber noch keine passende Lösung gefunden.

Folgendes Problem:

Ich habe ein paar tausend Dateien die Sonderzeichen (/ \ = ~ . ) im Dateinamen haben. Ich habe schon mit dem Automator probiert, diese Sonderzeichen zu entfernen. Aber wie es schein, gibt es Probleme wenn die Datei keinen suffix hat. Also z.B. .eps oder .tiff fehlt.

Dann kann der Automator die Sonderzeichen nicht entfernen.

Gibt es eine Möglichkeit automatisch erst die Suffixe anzuhängen (also für jeden dateityp den richtigen suffix, für tiff .tiff und für eps .eps)?
 
Der hilft mir leider nicht viel. Ich habe viele Dateien ohne suffix und den muss ich erst typbasiert anfügen. Also für TIFF .tift für EPS .eps usw.

Hatte es schon mit dem Renamer4Mac probiert. Der hatte auch seine Probleme beim umbenennen, wenn die Datei wie folgt aussah:
Code:
Hgb/5/3.5/6.4/ZR
Da kein Suffix vorhanden ist, hat er die Slashes bis zum ersten Punkt entfernt und danach aufgehört.
 
Ich würde es über den terminal versuchen, a la:
Code:
d=$(ls -1)
for i in $d;do fn=$( echo $i | sed 's/[(/\=~.]//g' ); mv $i $fn;done

Allerdings ist das ungetestet!!

Versuche es erst mit einem kleinen Teil von kopierten Daten bevor irgend was schief geht!

---------- edit -----------
P.S.:
Suffixe werden mit dem Code hier auch einfach an den Dateinamen "geklatscht" ohne ihn mit "." getrennt beizubehalten, da alle Sonderzeichen egal wo sie im Dateinamen stehen entfernt werden.
 
Zuletzt bearbeitet:
Das Problem ist nur, dass die Dateien verstreut in dutzenden Unterordnern liegen. Und ich brauche auch die file extension, damit die Dateien auf Windows richtig erkannt werden.
 
Bist Du sicher, daß die Files keine Suffix haben? Oder ist nur die Visualisierung im Finder ausgeblendet?
Wenn die auf einem Rechner mit *nix-System (OS X/Linux) erstellt worden sind, dann haben sie immer eine Suffix (idem für Windows): auch im Terminal sind sie ohne File-Extension?

Ciao
Farid
 
Jep, bin mir sicher. Wenn ich .eps an den Dateinamen anfüge, werde ich gefragt ob ich den Suffix von 5/2.5 auf .eps ändern möchte.
 
Wie schon geschrieben, sind diese Dateien wohl nicht in OS X erstellt worden.

Was mir nicht ganz klar ist: erkennt den OS X, um welche Dateien es sich handelt? Werden sie mit den nötigen Programmen geöffnet?
Dann existieren Infos, die zum Anfügen einer Dateiendung herangezogen werden können.

Folgender im AppleScript Editor ausgeführter Befehl könnte etwas Licht in die Angelegenheit bringen:
info for (choose file)
 
Ordner mit Unterordnern abarbeiten und Dateiendungen

Hab mich mal auf dies beiden Teile geworfen und die Sonderzeichen ignoriert.

Folgender Code hat drei Handler. Einer durchwühlt eine Ordner-Hierarchie und liefert eine Liste von Aliasen auf alle Dokumentdateien ab.

Einer schaut sich den Dateianfang an und ordnet eine Endung zu. Klappt natürlich nur für Dateien, die mit magic bytes gekennzeichnet sind. Die Liste der magic bytes und der Endungen steht am Anfang als Property, also bitte nach Geschmack erweitern. Für die Unterscheidung zwischen .ps und .eps steht im find_suffix Handler noch Sondercode, kann sein, dass Du davon mehr brauchst.

Die Technik ist leider nicht perfekt. Grund: AppleScript ist zu doof, Dateien binär zu lesen. (Irgend ein Apple Softwaredesigner weiß immer besser als du, was du wollen darfst.) Die Bytes werden als Buchstaben in Unicode Composite Normal Form wiedergegeben. Damit erwischt man nicht unbedingt genau die gewünschten Bytes. Bei TIFF wird deshalb hier ein Byte zu wenig beachtet. Sauber würde man das wohl nur mit anderen Script-Sprachen hin bekommen.

(Eine Liste von magic bytes hat http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html)

Der dritte Handler sagt dem Finder, auf was er den Suffix einer Datei setzen soll. Es den Finder machen zu lassen hat den Vorteil, dass man sich nicht um eventuell bestehende Suffixe kümmern muss.

Der Rest erlaubt, einen Ordner auszuwählen, holt sich dann die Liste der Dateialiase und geht in einer Schleife drüber.

Weil mir das Forum das Posting abschneidet, gibt es den Code im nächsten.

Gruß, Jürgen
 
Und hier der Code

Sorry, abgeschnitten wurde aufgrund eines nicht sichtbaren Zeichens bei den magic bytes für das Motorola TIFF (»MM«). Ich hab für dies Posting deshalb auf die zwei Buchstaben reduziert, was den Code natürlich unzuverlässiger macht.

Lasst den find_suffix-Handler ggf. bei euch über ein entsprechendes TIFF laufen und kopiert das Ergebnis bis zum Stern für die Liste. Das scheint zu klappen.

Code:
property magic_list : {{"!DOCTYPE html", "html"}, ¬
	{"%!PS", "ps"}, ¬
	{"%PDF", "pdf"}, ¬
	{"ˇÿˇ", "jpeg"}, ¬
	{"GIF8", "gif"}, ¬
	{"âPNG", "png"}, ¬
	{"MM", "tiff"}, ¬
	{"II*", "tiff"}, ¬
	{"C#+D§CM•Hdr", "rtd"}, ¬
	{"≈–", "eps"}}


on folder_scan(the_folder)
	set file_list to {}
	
	tell application "Finder"
		set file_list to document files of the_folder
		set folder_list to every folder of the_folder
		repeat with J from 1 to (count folder_list)
			set current to item J of folder_list
			set file_list to file_list & (my folder_scan(current))
		end repeat
	end tell
	repeat with J from 1 to count file_list
		set item J of file_list to (item J of file_list) as alias
	end repeat
	return file_list
end folder_scan

on find_suffix(file_reference)
	-- requires property magic_list
	set file_start to ""
	try
		set fh to (open for access file_reference)
		set file_start to (read fh for 20) as Unicode text
	end try
	try
		close access fh
	end try
	set f_suffix to ""
	repeat with X in magic_list
		--log item 1 of X
		if file_start begins with (item 1 of X) then
			set f_suffix to (item 2 of X)
			exit repeat
		end if
	end repeat
	-- special for EPS
	if f_suffix = "ps" then
		if file_start contains "EPSF" then
			set f_suffix to "eps"
		end if
	end if
	return f_suffix
end find_suffix

on set_suffix(file_ref, file_suffix)
	tell application "Finder"
		set name extension of file_ref to file_suffix
	end tell
end set_suffix

set fol to choose folder
set file_list to folder_scan(fol)
repeat with X in file_list
	try
		set file_suffix to find_suffix(X)
		log file_suffix
		set_suffix(X, file_suffix)
	end try
end repeat
 
*grins
Magic Number hätte ich als nächstes ins Spiel gebracht ... sofern sich der TE noch mal gemeldet hätte :cool:
Danke für das Skript. Das kann man ja eventuell mal brauchen!
 
Zurück
Oben Unten