Gå til innhold

forandre filnavn på Mange filer


Anbefalte innlegg

da får jeg denne...

 

line 6: [: 242 filelist.txt: integer expression expected

Så du fikset det, men forklaring:

 

Det lille scriptet jeg skrev virker. Forutsatt at man a) klarer å kopiere det jeg har skrevet riktig, og b) har alle kommandoene i scriptet, og c) bruker bash.

Lenke til kommentar
Videoannonse
Annonse
da får jeg denne...

 

line 6: [: 242 filelist.txt: integer expression expected

Så du fikset det, men forklaring:

 

Det lille scriptet jeg skrev virker. Forutsatt at man a) klarer å kopiere det jeg har skrevet riktig, og b) har alle kommandoene i scriptet, og c) bruker bash.

Nei :)

 

Fordi funket ikke hos meg, jeg fikk samme feil. Jeg hadde også .txt filer da - og mange av filene hadde flere mellomrom ;]

Lenke til kommentar

Ingen som leste rename(1) nei, eg ser de er glade i å gjera ting tungvint ;) La meg demonstrera rename, då:

 

ganske@linux:~/mb/test > ls -1
  jkl.test
a b c.test
def. test
gh i.t e s t
m n o
ganske@linux:~/mb/test > rename -v 's/ /_/g' *
  jkl.test renamed as ___jkl.test
a b c.test renamed as a_b_c.test
def. test renamed as def._test
gh i.t e s t renamed as gh_i.t_e_s_t
m n o renamed as m_n_o
ganske@linux:~/mb/test > ls -1
___jkl.test
a_b_c.test
def._test
gh_i.t_e_s_t
m_n_o
ganske@linux:~/mb/test >

 

rename finst på så godt som alle maskiner med Perl, dvs. så godt som overalt ;)

Lenke til kommentar

Rekursivt er det forresten litt vanskelegare. Det kan t.d. gjerast på denne måten, med find:

ganske@linux:~/mb/test > find . -type f -and -name '*' | rename -v 's/ /_/g'
reading filenames from STDIN
./test2/gh i.t e s t renamed as ./test2/gh_i.t_e_s_t
./test2/m n o renamed as ./test2/m_n_o
./test2/   jkl.test renamed as ./test2/___jkl.test
./test2/def. test renamed as ./test2/def._test
./test2/a b c.test renamed as ./test2/a_b_c.test
./gh i.t e s t renamed as ./gh_i.t_e_s_t
./m n o renamed as ./m_n_o
./a b c.test renamed as ./a_b_c.test
./   jkl.test renamed as ./___jkl.test
./def. test renamed as ./def._test
ganske@linux:~/mb/test >

Alltid kjekt når nokon andre har funne opp hjulet først :)

Lenke til kommentar

Et perl-script som fixer biffen på både linux og hp:

fixer følgende tegn " ","&","\\(","\\)","'","''".

 

hvem trenger vel innebygde kommandoer? det er så kjedeligt.. :blush:

 

#!/usr/bin/perl

#

# Usage: "./script directory_you_want_to_check"

#

&list_files;

sub list_files {

my $checkdir = shift @ARGV;

@cmd =`find $checkdir -type d `;

foreach (@cmd)

{

&rename_file($_);

}

 

@cmd =`find $checkdir -type f `;

foreach (@cmd)

{

&rename_file($_);

}

}

sub rename_file {

my @filthy_characters = (" ","&","\\(","\\)","'","''");

my $newname = my $oldname = shift;

foreach my $character (@filthy_characters){

$oldname=~ s/$character/\\$character/g;

chomp ($oldname);

}

$oldname =~ s/\\\\/\\/g;

$newname =~ s/\&/_and_/g;

foreach my $character (@filthy_characters){

$newname=~ s/$character/\_/g;

chomp ($newname);

}

if ($oldname ne $newname ) {

system("mv $oldname $newname");

}

}

Lenke til kommentar
Et perl-script som fixer biffen på både linux og hp:

fixer følgende tegn " ","&","\\(","\\)","'","''".

 

hvem trenger vel innebygde kommandoer? det er så kjedeligt.. :blush:

Det har jo ein viss læringsverdi, men skriptet ditt er meir komplisert og mindre fleksibelt og robust enn /usr/bin/rename. ;)

Lenke til kommentar

gøy å se at så mange hadde en interresse for dette :D , men jeg har en annen lignende nøtt på lager, "hvordan forandre all uppercase til lowercase" fortsatt i alle filer i en mappe...

 

 

 

trur jeg skal skaffe meg litt manualer innen denne form for programmering...

Endret av magikern
Lenke til kommentar
Hmm,naaaj. "sed" kjører ikke regex ibrotha :)  Du skriver det på en mer bash måte.. ;) Og dessuten /g'en tror jeg heller ikke trengs - det er sånnt du gjør i "vi" - trodde ikke det skulle være nødvendig her..

Til å begynne med var jeg enig med deg, men kverulanten i meg måtte teste det ut....

echo "ja ja ja" | sed "s/[ ]//"
jaja ja
echo "ja ja ja" | sed "s/[ ]//g"
jajaja

:w00t:

Lenke til kommentar
men jeg har en annen lignende nøtt på lager, "hvordan forandre all uppercase til lowercase" fortsatt i alle filer i en mappe...

Nemnte eg at rename er fleksibelt? :thumbup:

ganske@linux:~/mb/test > rename -v 's/([a-z])/\u$1/g' *
___jkl.test renamed as ___JKL.TEST
a_b_c.test renamed as A_B_C.TEST
def._test renamed as DEF._TEST
gh_i.t_e_s_t renamed as GH_I.T_E_S_T
m_n_o renamed as M_N_O
test2 renamed as TEST2

Med 'man perlre' lærer du mykje rart om kva eit Perl-regexp kan brukast til.

Lenke til kommentar
men jeg har en annen lignende nøtt på lager, "hvordan forandre all uppercase til lowercase" fortsatt i alle filer i en mappe...

Nemnte eg at rename er fleksibelt? :thumbup:

ganske@linux:~/mb/test > rename -v 's/([a-z])/\u$1/g' *
___jkl.test renamed as ___JKL.TEST
a_b_c.test renamed as A_B_C.TEST
def._test renamed as DEF._TEST
gh_i.t_e_s_t renamed as GH_I.T_E_S_T
m_n_o renamed as M_N_O
test2 renamed as TEST2

Med 'man perlre' lærer du mykje rart om kva eit Perl-regexp kan brukast til.

får "is a directory"

feilmld...

 

forøvrig så vidt jeg skjønner det gjør jo det scriptet akkurat motsatt av hva jeg tenkte på...

Lenke til kommentar
får "is a directory"

feilmld...

 

forøvrig så vidt jeg skjønner det gjør jo det scriptet akkurat motsatt av hva jeg tenkte på...

"Left as an exercise to the reader", er det ikkje det det heiter når du har gjort ein glipp? ;) OK, prøv med "\l" (l for lower) i staden for "\u" (u for upper).

 

Feilmeldinga er ikkje mogleg å tyda utan å sjå kva for kommando du har brukt.

Lenke til kommentar
får "is a directory"

feilmld...

 

forøvrig så vidt jeg skjønner det gjør jo det scriptet akkurat motsatt av hva jeg tenkte på...

"Left as an exercise to the reader", er det ikkje det det heiter når du har gjort ein glipp? ;) OK, prøv med "\l" (l for lower) i staden for "\u" (u for upper).

 

Feilmeldinga er ikkje mogleg å tyda utan å sjå kva for kommando du har brukt.

prøvde med:

 

/pub > rename -v 's/([a-z])/\l$1/g'*

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...