Op 26 maart 2013 10:51 heeft Max <[email protected]> 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 -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/cafxx2anxuwfump-99afeqywzttv6sytmebtrfde32gmto0c...@mail.gmail.com
