In einem Verzeichnis habe ich eine grosse Anzahl von Dateien. Ich möchte mir nun ein kleines Scipt schreiben dass die Datein zufällig von 1.html bis x.html umbenennt. Mein Problem ist allerdings dass ich mir natürlich keine Datei überschreiben lassen will, auch sollten wenn möglich keine Lücken sein bei den neuen Dateinamen.
Wer kann mir da helfen?
Gruss
Steve
Dateien zufällig sortieren
ich weiss jetzt nicht, wie gut sich bash Skripte eignen, aber sonst nimmst du eben Perl.
Der Ablauf im groben:
1. raussuchen, wieviele Dateien sich in dem Verzeichnis befinden
2. ein entsprechend großes Array erstellen, mit den nummern von 1 bis Anzahl der Dateien
3. das array zufällig mischen
4. die Dateien der Reihe nach, mit den neuen Namen umbenennen/kopieren
ich kann dir allerdings kein fertiges Script liefern, so gut kenn ich mich mit perl und arrays/zufallszahlen nicht aus (mit pascal wär das schon besser ).
viel erfolg noch,
npi
Der Ablauf im groben:
1. raussuchen, wieviele Dateien sich in dem Verzeichnis befinden
2. ein entsprechend großes Array erstellen, mit den nummern von 1 bis Anzahl der Dateien
3. das array zufällig mischen
4. die Dateien der Reihe nach, mit den neuen Namen umbenennen/kopieren
ich kann dir allerdings kein fertiges Script liefern, so gut kenn ich mich mit perl und arrays/zufallszahlen nicht aus (mit pascal wär das schon besser ).
viel erfolg noch,
npi
Hi steve,
hier mal ein Pythonscript für Dich:
einfach das Script als dateimixer.py speichern und mit chmod +x dateimixer.py ausführbar machen.
Dann kannst du es mit dateimixer.py verzeichnis extension aufrufen. Du musst fürs aktuelle Verzeichnis ./ verwenden und wenn keine extension angegeben wurde, wird .html als Vorgabe benutzt.
Gruß
Dookie
hier mal ein Pythonscript für Dich:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os, sys
from random import choice
if len(sys.argv) == 1:
print "usage: %s directory [extension (html by default)" % sys.argv[0]
sys.exit()
dirpath = sys.argv[1]
if len(sys.argv) == 3:
extension = sys.argv[2]
else:
extension = ".html"
entries = filter(lambda x: x.endswith(extension), os.listdir(dirpath))
n = 1
while entries:
x = choice(entries)
entries.remove(x)
os.rename(os.path.join(dirpath, x), os.path.join(dirpath, "%03i.%s" % (n, extension)))
# print os.path.join(dirpath, x), "umbenannt zu", os.path.join(dirpath, "%03i.%s" % (n, extension))
n += 1
Dann kannst du es mit dateimixer.py verzeichnis extension aufrufen. Du musst fürs aktuelle Verzeichnis ./ verwenden und wenn keine extension angegeben wurde, wird .html als Vorgabe benutzt.
Gruß
Dookie
Hi Steve,
das passiert aber nur wenn du das Script 2mal oder öfter über das Verzeichnis laufen lässt. Oder wenn sich bereits Dateien in der form ###.html in dem Verzeichnis befinden.
Hier mal ein verbessertes Script, das die Dateien zuerst von name.extension in old_name.extension umbenennt und dann durchnummeriert.
Gruß
Dookie
das passiert aber nur wenn du das Script 2mal oder öfter über das Verzeichnis laufen lässt. Oder wenn sich bereits Dateien in der form ###.html in dem Verzeichnis befinden.
Hier mal ein verbessertes Script, das die Dateien zuerst von name.extension in old_name.extension umbenennt und dann durchnummeriert.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os, sys
from random import choice
if len(sys.argv) == 1:
print "usage: %s directory [extension (html by default)" % sys.argv[0]
sys.exit()
dirpath = sys.argv[1]
if len(sys.argv) == 3:
extension = sys.argv[2]
else:
extension = ".html"
entries = filter(lambda x: x.endswith(extension), os.listdir(dirpath))
for x in entries:
os.rename(os.path.join(dirpath, x), os.path.join(dirpath, "old_"+x))
n = 1
while entries:
x = choice(entries)
entries.remove(x)
os.rename(os.path.join(dirpath, "old_"+x), os.path.join(dirpath, "%03i.%s" % (n, extension)))
# print os.path.join(dirpath, x), "umbenannt zu", os.path.join(dirpath, "%03i.%s" % (n, extension))
n += 1
Dookie
Zuletzt geändert von Dookie am 22.11.2003 19:51:12, insgesamt 1-mal geändert.