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

Re: rename filenames



On 25-03-13 14:45, Frans van Berckel wrote:
> Hoe zoek je met het find commando in Linux, naar bestanden met een
> overbodige spatie voor de extentie?

Je moet die escapen. Als je weet wat de extensie is, dan wordt het iets
in de aard van:

find <directory> -name " .extensie"

weet je dan niet, dan moet je gaan regexen:

find <directory> -regex " .[^.]*$"

is iets minder performant, maar werkt wel voor alle extensies.

daarbij zeg ik: zoek een bestand met een naam waarvan het laatste punt
in de naam vooraf gegaan wordt door een spatie.

> En hoe hernoem je deze vervolgens?
> 
> Even als voorbeeld dan moet 'foo bar extra spaces .extention' 'foo
> bar.extention' gaan heten. Heeft iemand hier ervaring mee?

Dat wordt wat interessanter. Je wilt waarschijnlijk iets doen in de
stijl van:

#!/bin/bash

while [ ! -z "$1" ]
do
  NAME="$1"
  shift
  BASE="${NAME%.*}"
  EXT="${NAME#$BASE}"
  BASE="$(echo "$BASE" | sed -e 's/ *$//')"
  mv "$NAME" "${BASE}.${EXT}"
done

${varname%pattern} gooit een suffix, gedefinieerd door het patroon, weg
(in dit geval is de suffix "iets wat begint met een punt").

${varname#pattern} gooit een prefix, gedefinieerd door het patroon, weg
(in dit geval is de prefix een variabele die we net gedefinieerd hebben
als de basisnaam van je bestand). Je hebt dus een variabele $EXT met de
extensie van je bestandnaam, en $BASE met de basename van je
bestandnaam. Je zou ook het programma "basename" kunnen gebruiken, maar
dan moet je de extensie al kennen (en da's ook een fork() meer, dus iets
minder performant).

Vervolgens gebruik ik sed om trailing spaces uit je basename weg te
gooien. Het is VZIW helaas niet mogelijk om dat met zo'n variable
manipulations te doen, dus gebruiken we hier sed.

dat voer je dan aan xargs, like so:

find <directory> <filter> -print0 | xargs -0 <naam van script>

waarbij <filter> één van de twee filters eerder uit deze mail is.

De optie '-print0' zorgt er voor dat find de argumenten NUL-separated
uitvoert; de '-0' optie van xargs verwacht bestandnamen in dat formaat.
Vermits je met bestanden met spaties werkt, is dat absoluut
noodzakelijk, anders gaat er één en ander mislopen.

-- 
Copyshops should do vouchers. So that next time some bureaucracy
requires you to mail a form in triplicate, you can mail it just once,
add a voucher, and save on postage.


Reply to: