[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] (none)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] (none)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive]
Jeg ønsker at søge i en mappe med filer og undermapper, hvor jeg så
vil erstatte et ord med et nyt ord. Dette gælder både for mapper,
filnavne samt tekst i filer. Ændringen skal være case-sensitive. Jeg
er ny med linux og kan ikke rigtig få hul på den...
Normalt vil man nok dele opgaven op i to dele:
a) Omdøbe filer og kataloger.
b) Ændre i filer.
Hvis vi går ud fra at vi starter i kataloget »rodkatalog« og vil
erstatte »et« med »andet«, så kan vi løse delopgaverne sådan her:
a) Med kommandoen:
find rodkatalog -depth | while read navn; do
katalog="$(dirname "${navn}")"
fil="$(basename "${navn}")"
rettet_filnavn="${fil//et/andet}"
if [ "${rettet_filnavn}" != "${fil}" ]; then
echo mv -i "${katalog}/${fil}" \
"${katalog}/${rettet_filnavn}"
fi
done | more
(Denne udgave _viser_ dig blot hvad der vil ske. Du skal erstatte
»echo mv« med »echo no | mv« for at få omdøbt katalogerne.)
Hvis kataloget hedder noget andet end »rodkatalog«, skal du ændre
i den første linje.
Hvis du vil omdøbe andet end fra »et« til »andet«, skal du ændre i
den fjerde linje.
b) Med kommandoen:
find rodkatalog -type f | while read fil; do
~
if grep -l 'en' "${fil}" 1>/dev/null; then
sed -i 's/en/anden/g' "${fil}" \
&& echo "Erstattede »en« med »anden« i »${fil}«."
fi
done | more
Jeg har her valgt at lade kommandoen rapportere hvilke filer der
er blevet rettet i.
Hvis du først vil prøve med en kopi af dine data, så kan du med
kommandoen »cp -pr rodkatalog kopi-af-rodkatalog« oprette en kopi
af hele det katalog (med underkataloger) du vil arbejde på.
Jeg vil foreslå at du læser brugsanvisningerne til de programmer jeg
bruger i kommandoerne ovenfor _før_ du satser dine data på dem. Hvis
du for eksempel skal bruge brugsanvisningen til »find«, så taster du
blot »man find« på kommandolinjen. (»man« er kort for »manual«)
man find
man dirname
man basename
man mv
man more
man grep
man sed
God fornøjelse,
Jacob
Tak for det hurtige svar. Det sparede mig for mange timers slave arbejde.
/Rasmus
Last modified
2008-03-01, 02:01 CET
[an error occurred while processing this directive] This page is maintained by
[an error occurred while processing this directive]MHonArc
[an error occurred while processing this directive] #
[an error occurred while processing this directive] *