sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #53163
Re: Lille udfordring med rename.
On 17 Jul 2002, Ole Tranberg wrote:
> Nu ville jeg så gerne ændre navnet på alle billederne.
>
> Fx vil jeg gerne ændre
> cd1_004_02.jpg
> til
> cd1_004.jpg.
>
> Dvs. jeg vil gerne fjerne de tegnene fra den anden "_" til lige inden
> ".". Det kan være 1,2 eller tre tegn.
Okay... Jeg kunne ikke lade være med at lege lidt med grep også...
Følgende lille script burde kunne opfylde dit umiddelbare behov. Jeg har
forudsat at der kun er numre der er interessante at skifte ud. Hvis der er
andre tegn, så kan man erstatte det sindssyge "ls | grep <udtryk>" med et
mere normalt "*_*_*.*" istedet.
#!/bin/bash
#
# Rename filer i et katalog
# Hvis det nye filnavn allerede findes indsættes en tæller i
# filnavnet der vil komme til at hedde *_*.x.* hvor x bliver talt
# op fra 1 indtil et ledigt filnavn findes.
#
for file in `ls | grep -E \
"[[:alnum:]]{1,}_[[:digit:]]{1,}_[[:digit:]]{1,3}[\.][[:alnum:]]{1,}"`\
; do
if [ -f "${file}" ]; then
extension="${file##*.}"
basename="${file%.${extension}}"
basename="${basename%_*}"
counter=0;
newname="${basename}.${extension}"
if [ "${newname}" = "${file}" ]; then
# nyt og gammelt filnavn er det samme.
continue
fi
while [ -f "${newname}" -a "${newname}" != "${file}" ]; do
# Tæl op til et ledigt filnavn findes.
counter=$(( $counter + 1 ))
newname="${basename}.${counter}.${extension}"
done
# Forsøg at rename filen
mv "${file}" "${newname}" || continue
echo "${file} -> ${newname}"
fi
done
>
> Hvordan gøres det lettest? Jeg har kigget lidt på rename, men jeg er
> tydeligvis gået i stå.
>
Jeg er absolut IKKE overbevist om at dette er den letteste måde.
Med venlig hilsen
Bjørn Bille Højte
bjoern@xxxxxxxxxxxxx
References