Author |
Message |
|
Post subject: Dateien benennen wie Ordner?
Posted: 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
|
|
|
|
 |
|
Post subject: Dateien benennen wie Ordner?
Posted: Feb 21, 2012 - 02:02 AM
|
|
Developer


Joined: Jul 10, 2004
Posts: 290
Location: Bayern (München & Rottenburg)
|
|
|
|
 |
|
Post subject: Dateien benennen wie Ordner?
Posted: Feb 23, 2012 - 08:59 AM
|
|
Joined: Jan 04, 2007
Posts: 1604
Location: Hamburg
|
|
|
|
 |
|
Post subject:
Posted: 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.
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... |
|
|
|
|
 |
|
Post subject:
Posted: Feb 24, 2012 - 11:16 AM
|
|
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
|
|
|
|
 |
|
Post subject:
Posted: Feb 24, 2012 - 02:42 PM
|
|

Joined: Jun 27, 2007
Posts: 409
|
|
Danke, acritox.
Ich probiere das aus, sobald ich wieder zu Hause bin. |
|
|
|
|
 |
|