Acties:
  • 0 Henk 'm!

  • Candymirror
  • Registratie: November 2003
  • Laatst online: 04-10 11:54
Ik ben voor het gemak een scriptje aan het schrijven om grootte aantallen filenamen in een keer aan te passen. Onderstaand voldoet al aardig, ik ben nog geen problemen tegen gekomen bij het hernoemen. Eing probleem is dat het script alleen werkt op files die in de directory staan waar ook het script zich bevindt. en ik wil graag het script in het $PATH zetten (bv /bin) zodat ik het vanuit elke directory kan aan roepen en ook kan gebruiken.

Het is vast iets simpels maar ik weet niet (meer) hoe?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/sh
echo 'Geef de zoekstring in de filenaam die gewijzigd moet worden:'
read STRING
echo 'Geef de tekst waarin de zoekstring gewijzigd moet worden:'
read SUBSTITUTE
IFS=$'\n'
        for INFILE in $(ls -1 *$STRING*)
        do
        OLD=`basename "${INFILE}"`
        NEW=`echo $OLD | sed s/$STRING/$SUBSTITUTE/`
        echo "$INFILE" zal worden hernoemd naar "$NEW"
        done
echo 'Is dit wat u wilt? (j/n)'
read OK
case "$OK" in
j*)
    IFS=$'\n'
    for INFILE in $(ls -1 *$STRING*)
    do
    OLD=`basename "${INFILE}"`
    NEW=`echo $OLD | sed s/$STRING/$SUBSTITUTE/`
    mv "$INFILE" "$NEW"
    echo "$INFILE" hernoemd naar "$NEW"
    done
    ;;
*)
    echo 'bewerking afgebroken'
    ;;
esac

[ Voor 3% gewijzigd door blaataaps op 01-08-2010 14:37 . Reden: i.p.v. table-tags, de handige code-tag voor o.a. monospacing ]


Acties:
  • 0 Henk 'm!

Verwijderd

Candy,
Als jouw script in jouw homedir moet blijven staan, voeg dan jouw homedir in de PATH variable.
Die staat gedefinieerd in de .profile in je homedir.

Acties:
  • 0 Henk 'm!

  • Candymirror
  • Registratie: November 2003
  • Laatst online: 04-10 11:54
Stom vergeten te melden, het script moet een standaard door het systeem gedefineerde PATH variabele komen te staan. Anders doet ie het na een reboot niet meer, het is een gefunplugde NAS (CH3SNAS). Bovendien werkt het script dus niet op het moment dat ik hem als root plaats in bv /bin, /usr/bin of /ffp/bin welke allemaal standaard in de Path variabele staan.

Het script draai ik dus vanaf mijn CH3snas middels een ssh sessie

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Wat gaat er mis dan?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
u@tstsrv02:/tmp/foo# touch test1 test2 test3
u@tstsrv02:/tmp/foo# ./test.sh 
Geef de zoekstring in de filenaam die gewijzigd moet worden:
test
Geef de tekst waarin de zoekstring gewijzigd moet worden:
foo
test1 zal worden hernoemd naar foo1
test2 zal worden hernoemd naar foo2
test3 zal worden hernoemd naar foo3
test.sh zal worden hernoemd naar foo.sh
Is dit wat u wilt? (j/n)
n
bewerking afgebroken
u@tstsrv02:/tmp/foo# vim 
u@tstsrv02:/tmp/foo# mv test.sh ..
u@tstsrv02:/tmp/foo# ../test.sh 
Geef de zoekstring in de filenaam die gewijzigd moet worden:
test
Geef de tekst waarin de zoekstring gewijzigd moet worden:
foo
test1 zal worden hernoemd naar foo1
test2 zal worden hernoemd naar foo2
test3 zal worden hernoemd naar foo3
Is dit wat u wilt? (j/n)
n
bewerking afgebroken


Gaat prima m.a.w? Overigens is 'ls -1' gebruiken vrij lelijk. Je kunt beter gewoon zeggen:

code:
1
2
3
for i in *$STRING*; do
 blah;
done

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Candymirror
  • Registratie: November 2003
  • Laatst online: 04-10 11:54
Het script opzich doet het tot op heden prima (ik kom vast nog wel eens een string tegen die het het script lastig maakt maar dat los ik dan wel weer op :))

Het probleem is dat wanneer ik het script executable maak en in bv de dir /bin/ plaats, ik het netjes overal kan aan roepen. alleen dan loopt het script dus niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
root@CH3SNAS:/root# ls
test1  test2  test3
root@CH3SNAS:/root# mmv 
Geef de zoekstring in de filenaam die gewijzigd moet worden:
test
Geef de tekst waarin de zoekstring gewijzigd moet worden:
foo
test1
test2
test3 zal worden hernoemd naar foo1
foo2
foo3
Is dit wat u wilt? (j/n)
j
mv: cannot rename 'test1
test2
test3': No such file or directory
test1
test2
test3 hernoemd naar foo1
foo2
foo3
root@CH3SNAS:/root# ls
test1  test2  test3
root@CH3SNAS:/root#

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Dat komt omdat de parsing van de output van ls misgaat. Haal je IFS meuk weg, vervang die ls'en door wat ik eerder al zei, en dan zou 't gewoon moeten werken.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Candymirror
  • Registratie: November 2003
  • Laatst online: 04-10 11:54
Thanx, ik vermoede al dat het met ls te maken had. Ik heb ooit eens een cursus linux scripting gehad, maar maak er bijna geen gebruik van. De IFS meuk komt nog uit een script om spaties uit filenamen te halen.

Topic mag dicht. Kan ik lekker filenaampjes van mijn tv-series aan passen zodat ze goed gescraped gaan worden :)

Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Naast het schrappen van ls is sed ook niet speciaal nodig hier, je shell kan vast zelf wel waarden vervangen. Bijvoorbeeld zo:

code:
1
for x in *test*; do echo $x wordt ${x//test/foo}; done
Pagina: 1