03.09.2014, 04:00 UhrDeutsch | English
Hallo Gast [ Registrierung | Anmelden ]

Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
Autor Nachricht
stalin2000
Titel: Dateien benennen wie Ordner?  BeitragVerfasst am: 20.02.2012, 19:47 Uhr



Anmeldung: 04. Jan 2007
Beiträge: 1604
Wohnort: Hamburg
Hallo Ihr,

ich habe Ordner, die vernünftige Namen haben, in denen Dateien liegen, die Film1.avi oder so ähnlich heißen. In jedem Ordner liegt eine solche Datei. Nun möchte ich mittels eines Scripts alle Dateien mit diesen blöden Namen (haben alle die selbe Endung) jeweils so benennen wie der Ordner in dem sie liegen...

Könnte jemand von Euch mir sagen, wie ich dies bewerkstelligen könnte?

Viele Grüße Christopher

_________________
Es ist dem Untertanen untersagt, den Maßstab seiner beschränkten Einsicht an die Handlungen der Obrigkeit anzulegen - Kurfürst Friedrich Wilhelm von Brandenburg
www.projektidee.org | www.gesundheitstabelle.de | www.neoliberalyse.de
 
 Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen  
Antworten mit Zitat Nach oben
acritox
Titel: Dateien benennen wie Ordner?  BeitragVerfasst am: 21.02.2012, 02:02 Uhr
Developer
Developer


Anmeldung: 10. Jul 2004
Beiträge: 288
Wohnort: Bayern (München & Rottenburg)
Code:
find /pfad/zum/ordner -type f | rename -n 's@([^/]*)/[^/]*\.([^/.]*)$@$1/$1.$2@'

"-n" rausnehmen falls das vorgeschlagene Ergebnis passt und wirklich umbenannt werden soll

acritox

_________________
http://kanotix.acritox.com/factoids - http://kanotix.acritox.com - http://acritox.de/repository - http://andreas-loibl.de - GPG: F781E713
 
 Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen ICQ-Nummer 
Antworten mit Zitat Nach oben
stalin2000
Titel: Dateien benennen wie Ordner?  BeitragVerfasst am: 23.02.2012, 08:59 Uhr



Anmeldung: 04. Jan 2007
Beiträge: 1604
Wohnort: Hamburg
Super, danke!

_________________
Es ist dem Untertanen untersagt, den Maßstab seiner beschränkten Einsicht an die Handlungen der Obrigkeit anzulegen - Kurfürst Friedrich Wilhelm von Brandenburg
www.projektidee.org | www.gesundheitstabelle.de | www.neoliberalyse.de
 
 Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen  
Antworten mit Zitat Nach oben
totschka
Titel:   BeitragVerfasst am: 23.02.2012, 17:10 Uhr



Anmeldung: 27. Jun 2007
Beiträge: 402

hmm, das funktioniert, wenn 1 Datei im Ordner liegt. Bei mehreren Dateien wird die erste Datei umbenannt, die folgenden nicht mehr.

Da gibt es sicher auch einen Kniff, aber bis ich den raus hab, nehme ich solange krename. Winken
Ist aber interessant, ich fühle mich an uralte Unix-Zeiten erinnert, als wir Zeichenketten zerlegt, analysiert und wieder zusammengefügt haben, in einer gescheit gesteuerten Schleife natürlich...
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
acritox
Titel:   BeitragVerfasst am: 24.02.2012, 11:16 Uhr
Developer
Developer


Anmeldung: 10. Jul 2004
Beiträge: 288
Wohnort: Bayern (München & Rottenburg)
totschka hat folgendes geschrieben::
hmm, das funktioniert, wenn 1 Datei im Ordner liegt.

davon bin ich ausgegangen:
stalin2000 hat folgendes geschrieben::
In jedem Ordner liegt eine solche Datei.


als bash3-Schleife mit mehreren Dateien pro Ordner:
Code:
while read from
do
   to="$(perl -pe 's@([^/]*)/[^/]*\.([^/.]*)$@$1/$1.$2@' <<<"$from")"
   [ "$to" != "$to_old" ] && n=2 && to_old="$to" || to="${to%.*}-$((n++)).${to##*.}"
   echo mv "$from" "$to"
done < <(find /pfad/zum/ordner -type f)

("echo" rausnehmen um wirklich umzubenennen)
die RegExp ist die gleiche wie letztes mal. Die Umbenennungsregel für die weiteren Dateien wäre dabei jetzt so:
Code:
mv ./ordner/a.txt ./ordner/ordner.txt
mv ./ordner/b.txt ./ordner/ordner-2.txt
mv ./ordner/c.txt ./ordner/ordner-3.txt

das funktioniert auch, ist aber etwas langsam, weil perl jedes mal extra neu aufgerufen wird; deshalb wäre es wohl besser das Umformen komplett in perl zu machen:

Code:
find /pfad/zum/ordner -type f | perl -e 'for(<STDIN>){chop; s/'\''/'"'\\\\''"'/g; print "mv '\'\$_\'' ";s@([^/]*)/[^/]*\.([^/.]*)$@$1/$1.$2@; if($_ ne $old) {$n=2; $old=$_;} else {s/(\.[^.]*)$/-$n$1/; $n++}; print "'\'\$_\''\n";}'

um wirklich umzubenennen einfach noch "| sh" ans Ende des Befehls anhängen. Ist auch wieder die gleiche RegExp und die gleiche Umbenennungsregel, nur diesmal in Perl.

die vielen evtl. etwas verwirrenden ', " und \ kommen daher, dass ich die Umbenennung nicht direkt ausführe sondern nur (sozusagen in Scriptform) ausgebe und dabei auch auf Dateinamen wie z.B. "1'2/that's special.txt" vorbereitet sein wollte.

acritox

_________________
http://kanotix.acritox.com/factoids - http://kanotix.acritox.com - http://acritox.de/repository - http://andreas-loibl.de - GPG: F781E713
 
 Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen ICQ-Nummer 
Antworten mit Zitat Nach oben
totschka
Titel:   BeitragVerfasst am: 24.02.2012, 14:42 Uhr



Anmeldung: 27. Jun 2007
Beiträge: 402

Danke, acritox.
Ich probiere das aus, sobald ich wieder zu Hause bin.
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
Beiträge vom vorherigen Thema anzeigen:     
Gehe zu:  
Alle Zeiten sind GMT + 1 Stunde
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
PNphpBB2 © 2003-2007 
 
Deutsch | English
Logos and trademarks are the property of their respective owners, comments are property of their posters, the rest is © 2004 - 2006 by Jörg Schirottke (Kano).
Consult Impressum and Legal Terms for details. Kanotix is Free Software released under the GNU/GPL license.
This CMS is powered by PostNuke, all themes used at this site are released under the GNU/GPL license. designed and hosted by w3you. Our web server is running on Kanotix64-2006.