file nevek vegenek levagasa

Fórumok

Szervusztok!

A kovetkezo problemam van: letoltok egy csomo mp3 file-t a netrol, de kb igy neznek ki a letoltott file-ok nevei: *.mp3flkjdhgdfjhgkjdfgkjlfdgkjklhjdkjfdhgjkh.

Ez igy nem tul szep. :(

Idaig qmv-vel toroltem ki a felesleget, de meguntam. Szeretnek shell scriptet irni erre. Neztem sed-et, cut-ot, tr-t, de nem igazan talaltam meg a megoldast. Mindegyiknel az a gond, hogy nem tudom megmondani neki, hogy az *.mp3 utani reszt vagja le.

Merre induljak, mire keressek?

Hozzászólások

google -> regularis kifejezesek
---
"A legjobb dolgok az életben nem dolgok."

nekem van egy ilyen man rename:

       rename - renames multiple files

SYNOPSIS
       rename [ -v ] [ -n ] [ -f ] 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.

       For example, to rename all files matching "*.bak" to strip the exten‐
       sion, you might say

               rename 's/\.bak$//' *.bak

       To translate uppercase names to lower, you’d use

               rename 'y/A-Z/a-z/' *

OPTIONS
       -v, --verbose
               Verbose: print names of files successfully renamed.

       -n, --no-act
               No Action: show what files would have been renamed.

       -f, --force
               Force: overwrite existing files.

ENVIRONMENT
       No environment variables are used.

AUTHOR
       Larry Wall

SEE ALSO
       mv(1), perl(1)

DIAGNOSTICS
       If you give an invalid Perl expression you’ll get a syntax error.

BUGS
       The original "rename" did not check for the existence of target file‐
       names, so had to be used with care.  I hope I’ve fixed that (Robin
       Barker).

perl v5.8.8                       2009-01-14                         RENAME(1)

Hamarjában valami ilyesmi is megteszi:


#!/usr/bin/perl -w

if ($#ARGV <= -1)
{
print "\aHívás: $0 \n";
exit(0);
}

my $mask = $ARGV[0];
my $new_name = $ARGV[0];

$mask =~ s/^.+[.]mp3//;
$new_name =~ s/$mask//;
print "$ARGV[0] ->> $new_name\n";

A vastag betűs rész mentsd el egy fájlba - pl.: "rename_mp3" , adj neki végrehajtási jogot és próbáld ki mondjuk így:

./rename_mp3 rocskaszegi.csűrdöngölős.mp3abrakadabra

Amit kiír az kell neked.
Ez a kis programocska persze csak a név végének levágását szemlélteti, de az átnevezés műveletét neked kell beletenned.

Shell script (paraméternek egy filenevet vár, amiben minden sor egy átnevezendő mp3 elérési útja):
#!/bin/bash
if [ "$1" == "" ]; then echo "nem adtal meg filelistat"; exit; fi
cat $1 | while read fname
do
newname=`echo $fname | sed '/mp3.*$/mp3/'`
mv $fname $newname
done

A szóközökre senki sem gondol?


#!/bin/bash
if [ ! -d "$1" ]; then echo "adj meg parametert"; exit 1; fi
OIFS="$IFS"; IFS='
'
for mp3 in $(find $1 -iname '*.mp3*'); do mv "$mp3" "${mp3%%.mp3*}.mp3"; done
IFS="$OIFS"

Pl: ./rename.sh /home/en/letoltott/mp3ak
Ez szépen rekurzívan átnevezi az adott könyvtártól indulva az összes ilyen mp3-at.
Viszont erre találták ki a rename parancsot, mint fentebb írták.

Sziasztok!
Nem tudom, hogy illik-e másik topikjába belekotnyeleskedni, de én is hasonló problémával küszködök.
Van egy beadandó programom (shell script), aminek az egyik részfeladata egy átnevezés.
Én - a szokásostól eltérően - a rename paranccsal szerettem volna megoldani
A script összeállít egy reguláris kifejezést, majd azt átadva lefuttatja a rename-t, de a parancs nem hajtódik végre
A script:
prefix()
{
cd $2
regexp="'s/(\\w{0})/\$1$3/'"
echo $regexp
/usr/bin/rename -v $regexp *.jnlp

}

Ennek hatására a függvény a 2. paraméter ben megadott összes jnlp file-t kiegészít egy paraméterben ($3) megkapott taggal.
Ha lefuttatom a regexp értékével a rename parancsot parancssorból, akkor hibátlanul megcsinálja az átnevezéseket.
Ha viszont a shell scriptből indítom, akkor nem történik semmi.
A kér regexp (a parancssorból futtatott, és a shell scriptben legenerált) 100%-ban megegyezik (azért van az echo).
Mit rontok el?
A regexp kiiratva 100%-ban megegyezik a parancssorban használttal.

Minden segítséget előre is köszönök!