[linux] mv commando vraagje

Pagina: 1
Acties:

  • Infern0
  • Registratie: September 2000
  • Laatst online: 20-08 13:36

Infern0

Hou die ontzettende rust!!

Topicstarter
Had ff een kleine vraag.
ik heb een hele rits bestanden met als naam:
pproxyrc5pproxyrc5k*.log
* = de datum

Deze moeten allemaal veranderand worden naar:
pproxyrc5*.log
* = nog steeds de datum

Hoe doe ik dit? Hbe het al een keer fout gedaan, zoals je ziet aan de bestandsnaam. :)

http://www.bsdfreaks.nl Home site: http://rob.lensen.nu /me was RobL


  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Op zaterdag 24 februari 2001 11:49 schreef rlensen het volgende:
Had ff een kleine vraag.
ik heb een hele rits bestanden met als naam:
pproxyrc5pproxyrc5k*.log
* = de datum

Deze moeten allemaal veranderand worden naar:
pproxyrc5*.log
* = nog steeds de datum

Hoe doe ik dit? Hbe het al een keer fout gedaan, zoals je ziet aan de bestandsnaam. :)
uit de losse pols (perfecte werking niet gegarandeerd):

--ff aangepast. veranderde naar de verkeerde naam

for i in $(ls *.log)
do
a=$(echo $i | sed 's/pproxyrc5k//')
mv $i $a
done

  • Infern0
  • Registratie: September 2000
  • Laatst online: 20-08 13:36

Infern0

Hou die ontzettende rust!!

Topicstarter
Dit is tcoh gewoon c-code?
Ben zelf nog maar beginnend c-programeur, dus zou je het ff een beetje willen toelichten?
Kan ik het volgende keer zelf.

http://www.bsdfreaks.nl Home site: http://rob.lensen.nu /me was RobL


  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Nee hoor. Is gewoon shell-code.

Euh toelichting... es denken. het "mv" commando laat alleen voor het eerste argument file expansion toe (dus iets met een * erin zeg maar). Om dus zowel meerdere filenamen als source en destination op te kunnen geven moet je de functionaliteit van "mv" nabouwen. de "for i in $(ls *.log)" regel leest 1 voor 1 alle bestanden die op ".log" eindigen in in de variabele "i". Met "sed" haal ik daar vervolgens het overbodige stuk af en pleur dat in de variabele "a". Tenslotte voer ik die twee argumenten aan het eigenlijke "mv" commando. De lus wordt dus doorlopen voor elke file die op ".log" eindigt, en daarmee is het probleem van meerdere files als destination voor "mv" omzeild :)

  • Infern0
  • Registratie: September 2000
  • Laatst online: 20-08 13:36

Infern0

Hou die ontzettende rust!!

Topicstarter
nog een klein prob
Er staan nog een aantal *.log.log files
Hoe haal ik een log weg (dus een extensie)

Ik d8 dit
for i in $(ls *.log.log)
do a=$(echo $i | sed 's/*.log.log//')
mv $i $a
done

maar werkt niet

http://www.bsdfreaks.nl Home site: http://rob.lensen.nu /me was RobL


  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Op zaterdag 24 februari 2001 15:19 schreef rlensen het volgende:
nog een klein prob
Er staan nog een aantal *.log.log files
Hoe haal ik een log weg (dus een extensie)

Ik d8 dit
for i in $(ls *.log.log)
do a=$(echo $i | sed 's/*.log.log//')
mv $i $a
done

maar werkt niet
Dat komt o.a. omdat een "." in een reguliere expressie een speciale betekenis heeft (any character). Verder is de syntax van s(ubstitute) als volgt: s/vervang-regexp/door-dit/[modifier]. Het wordt dan dus sed 's/\(log\)\.log/\1/'
Pagina: 1