Sep 18, 2025 - 10:16 PMDeutsch | English
Hello unlogged user [ Register | Log in ]

Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Author Message
stalin2000
Post subject: Dateien benennen wie Ordner?  PostPosted: Feb 20, 2012 - 07:47 PM



Joined: Jan 04, 2007
Posts: 1604
Location: 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
 
 View user's profile Send private message Visit poster's website  
Reply with quote Back to top
acritox
Post subject: Dateien benennen wie Ordner?  PostPosted: Feb 21, 2012 - 02:02 AM
Developer
Developer


Joined: Jul 10, 2004
Posts: 290
Location: 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
 
 View user's profile Send private message Visit poster's website ICQ Number 
Reply with quote Back to top
stalin2000
Post subject: Dateien benennen wie Ordner?  PostPosted: Feb 23, 2012 - 08:59 AM



Joined: Jan 04, 2007
Posts: 1604
Location: 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
 
 View user's profile Send private message Visit poster's website  
Reply with quote Back to top
totschka
Post subject:   PostPosted: Feb 23, 2012 - 05:10 PM



Joined: Jun 27, 2007
Posts: 409

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...
 
 View user's profile Send private message  
Reply with quote Back to top
acritox
Post subject:   PostPosted: Feb 24, 2012 - 11:16 AM
Developer
Developer


Joined: Jul 10, 2004
Posts: 290
Location: Bayern (München & Rottenburg)
totschka wrote:
hmm, das funktioniert, wenn 1 Datei im Ordner liegt.

davon bin ich ausgegangen:
stalin2000 wrote:
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
 
 View user's profile Send private message Visit poster's website ICQ Number 
Reply with quote Back to top
totschka
Post subject:   PostPosted: Feb 24, 2012 - 02:42 PM



Joined: Jun 27, 2007
Posts: 409

Danke, acritox.
Ich probiere das aus, sobald ich wieder zu Hause bin.
 
 View user's profile Send private message  
Reply with quote Back to top
Display posts from previous:     
Jump to:  
All times are GMT + 1 Hour
Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Powered by PNphpBB2 © 2003-2007 The PNphpBB Group
Credits
 
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.