| 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
 |