[shell script] hernoemen lijst van groot aantal files

Pagina: 1
Acties:
  • 54 views sinds 30-01-2008

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 22:21
Hey,

Ik heb een file op m'n redhat machine met een grote lijst (1400 regels) van files die ik hernoemd wil hebben.
Iedere regel ziet er zo uit:

/locatie/van/de/file/index.html?id=Weppel

Het vetgedrukte is dus altijd gelijk, alleen de locatie van de file verschilt iedere keer.

Nu wil ik de lijst omzetten naar dit:

/locatie/van/de/file/index.html

Bij iedere file moet er dus "?id=Weppel" vanaf.
Dit moet makkelijk te doen zijn met een klein shell scriptje, maar ik kom er maar niet achter hoe het moet ;(

Iemand?

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Om de file om te bouwen:
cat file | cut -d"?" -f 1 >file2
(knipt alles na de ? eraf)
of

perl -e -pi.bak 's/\?id=Weppel'//;' file
(edit 'in place', oude bestand wordt met .bak gebackupped)

Voor het meteen hernoemen:
even een gokje, niet getest:
for I in `cat filemetbestanden` ; do echo "$I" $(echo "$I" | sed 's/\?id=Weppel//'); done

als die sed goed is kun je eerste echo vervangen door mv

[ Voor 12% gewijzigd door pinball op 08-12-2003 07:56 ]

Whenever you find that you are on the side of the majority, it is time to reform.


  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 22:21
Sorry, ik denk dat ik niet duidelijk was :)

De lijst is een lijst met files die echt op de server staan, en ik wil de files die dus op de server staan hernoemen :) niet de lijst zelf ;)

Toch bedankt!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Pinball schreef op 08 december 2003 @ 07:55:
Voor het meteen hernoemen:
even een gokje, niet getest:
for I in `cat filemetbestanden` ; do echo "$I" $(echo "$I" | sed 's/\?id=Weppel//'); done

als die sed goed is kun je eerste echo vervangen door mv

Whenever you find that you are on the side of the majority, it is time to reform.


Verwijderd

for I in `ls *` ; do echo "$I" $(echo "$I" | sed 's/\?id=Weppel//'); done
Vervang de cat door ls en je bent toch klaar?

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 22:21
En uiteraard ben ik niet alleen onduidelijk 's morgens, maar ook nog eens slecht in lezen. Het script deed precies wat ik wilde! Trok wel even wat CPU, maar werkte per-fect!! Bedankt!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Bij sommige distributies van perl krijg je er gratis 'rename' bij die dat allemaal voor je doet.
code:
1
rename 's/A-Z/a-z' *

En zo heb je ook allemaal perl-operaties tot je beschikking, en een iets overzichtelijkere commandline.

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 22:21
blaataaps schreef op 08 december 2003 @ 11:53:
Bij sommige distributies van perl krijg je er gratis 'rename' bij die dat allemaal voor je doet.
code:
1
rename 's/A-Z/a-z' *

En zo heb je ook allemaal perl-operaties tot je beschikking, en een iets overzichtelijkere commandline.
Ik had inderdaad het commando rename al gevonden, maar de enige output die ik terug kreeg op rename --help was:
code:
1
call: rename from to files...

Vervolgens op goed geluk het volgende geprobeerd:
code:
1
rename ïndex.html?id=Weppel index.html

Deed redelijk weinig, dus heb er weinig aandacht meer aan besteed..

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 22:21
Verwijderd schreef op 08 december 2003 @ 08:02:
[...]


Vervang de cat door ls en je bent toch klaar?
Niet helemaal. Het zijn/waren ruim 1400 files verspreid over evenzoveel directories. Een ls * heeft dan weinig nut.

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
man rename
NAME
rename - renames multiple files

SYNOPSIS
rename [ -v ] perlexpr [ files ]

DESCRIPTION
"rename" renames the filenames supplied according to the rule specified as the first argument.
The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for
at least some of the filenames specified. If a given filename is not modified by the expression,
it will not be renamed. If no filenames are given on the command line, filenames will be read
via standard input.

Verwijderd

Weppel schreef op 08 december 2003 @ 12:03:
[...]


Niet helemaal. Het zijn/waren ruim 1400 files verspreid over evenzoveel directories. Een ls * heeft dan weinig nut.
Dat had je dus niet vermeld...

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 22:21
Verwijderd schreef op 08 december 2003 @ 13:34:
[...]


Dat had je dus niet vermeld...
Weppel schreef op 08 december 2003 @ 07:43:
Het vetgedrukte is dus altijd gelijk, alleen de locatie van de file verschilt iedere keer.
:Y)

Verwijderd

De locatie van iedere file verschilt, ook al staan ze in dezelfde directory... :O

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Verwijderd schreef op 08 december 2003 @ 14:26:
De locatie van iedere file verschilt, ook al staan ze in dezelfde directory... :O
kan namelijk best, 1500 keer een bestand 'index.html?id=Weppel' in 1 dir :P

Ga d'r nog ff over door anders :)

offtopic:
lekker veel posts in een topic wat evengoed met 'use the search/google' en een linkje naar de faq gesloten had kunnen worden :)

Whenever you find that you are on the side of the majority, it is time to reform.


Verwijderd

Pinball schreef op 08 december 2003 @ 14:51:
[...]


kan namelijk best, 1500 keer een bestand 'index.html?id=Weppel' in 1 dir :P

Ga d'r nog ff over door anders :)

offtopic:
lekker veel posts in een topic wat evengoed met 'use the search/google' en een linkje naar de faq gesloten had kunnen worden :)
Daar heb je een punt, en eigenlijk gelijk 2... :|

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
speelkwartiertje is nu wel over volgens mij :)
Pagina: 1

Dit topic is gesloten.