[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: rename filenames



On 26.03.2013 13:54, Arjen Bax wrote:
> Op 26 maart 2013 10:51 heeft Max <maccus@warpmail.net> het volgende geschreven:
>> (Kleine aanpassing mp3>${EXT} tov vorige reactie)
>>
>> Werkt dit niet gewoon? Lijstje met extensies zelf aanpassen.
>>
>> #!/bin/bash
>>
>> for EXT in mp3 MP3 ogg OGG; do
>>     find . -type f -regex ".*[ ].${EXT}" | sort -d -r | while read X; do
>>         Y="$(echo ${X} | sed "s|[ ]\.${EXT}|.${EXT}|")"
>>         [ -f "${X}" ] && mv -v "${X}" "${Y}"
>>     done
>> done
>> exit
> 
> Dat lijkt me niet zo effici�nt, die 'find' binnen de 'for'. Daardoor
> wordt het find-commando (in dit geval) 4 maal uitgevoerd op dezelfde
> directory-tree, waarbij steeds een andere subselectie wordt genomen.
> Bovendien worden bestanden met mixed-case extensies (.Mp3, .Ogg)
> overgeslagen.
> Een robuust algoritme doorloopt in ��n keer de directory-tree, vist
> daar de te wijzigen filenamen uit en hernoemt die. In 1 regel:
> 
> find -depth -name '* .*' -print0 | perl -wn0e '$orig = $_;
> s/\s+\././g; rename($orig, $_) or warn "$orig: $!\n"'
> 
> Highlights:
> - snel (slechts twee processen, parallel)
> - geen problemen met het quoten van spaties
> - geen probleem met filenamen die met een min-teken beginnen
> - doet ook directory's
> 
> 
> Vriendelijke groeten,
> Arjen Bax

Ligt eraan, als je deze actie eenmalig wilt uitvoeren om een paar
bestanden te hernoemen dan is een simpel scriptje wel voldoende lijkt
me. Anders zou ik gewoon een grafische client als pyrenamer gebruiken.



Reply to: