Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7277[/thread]

rename unter bash



<< >> 9 Einträge, 1 Seite
themiwi
 2005-09-15 01:42
#58011 #58011
User since
2005-09-15
4 Artikel
BenutzerIn
[default_avatar]
hallo

bin mir nicht ganz sicher, ob dieses forum der richtige platz dafür ist, aber da ein teil des problems ein perl skript betrifft, dacht ich probiers mal hier:

ich habe mir von <a href="http:///http://www.novell.com/coolsolutions/tools/15601.html" target="_blank">Novell Cool Solutions</a> ein bash skrip heruntergeladen, welches die leerzeichen in namen von dateien und ordnern durch _ ersetzt. tut es auch. aber leider erhalte ich immer eine fehlermeldung in einer zeile, die folgendes enthält:

rename @ - *

der fehler ist:

syntax error at (eval 1) line 2, at EOF

ich bin absolut kein kenner von bash und habe daher keine ahnung was @ - * bedeuten soll...


- michael
J-jayz-Z
 2005-09-15 10:01
#58012 #58012
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Na ja, das * in Bash ist ein Metazeichen, das alles matcht. Wie in perl .*
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Relais
 2005-09-15 12:19
#58013 #58013
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich hab mir mal das tolle Skript angesehen, das enthaelt aber gar kein Perl. Das ist wohl der Fehler... =)

Dies hier geht vielleicht besser:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl -w

use strict;

my $zaehler;

for my $spacig ( @ARGV ) {
( my $underscorig = $spacig ) =~ s/\s/_/g;
if ( -f $underscorig ) {
warn qq(Die Datei "$spacig" mag ich nicht in ),
qq("$underscorig" umbenennen, denn die gibt es bereits\n);
}
else {
rename( $spacig => $underscorig ) && ++$zaehler;
print qq(rename $spacig => $underscorig\n);
}
}

print $zaehler += 0, " Dateien umbenannt\n";
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
themiwi
 2005-09-15 13:27
#58014 #58014
User since
2005-09-15
4 Artikel
BenutzerIn
[default_avatar]
danke für die antwort. wi ich geschrieben habe, ist nur der skript
Code: (dl )
rename
, der aufgerufen wird, perl. aber was ich nicht verstehe, ist das
Code: (dl )
@ - *
. der * ist auch klar, aber was soll
Code: (dl )
@ -
? rename nimmt ein paar optionen, eine perl expression und eine liste von dateien. ich nehme an, dass das * wi üblich expanded wird. aber der rest...?

michael
Relais
 2005-09-15 13:38
#58015 #58015
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=themiwi,15.09.2005, 11:27]danke für die antwort. wi ich geschrieben habe, ist nur der skript
Code: (dl )
rename
, der aufgerufen wird, perl.[/quote]
Und da irrst Du Dich, das rename ist nicht das von Perl.

(wie kommst Du nur darauf?)

Zwar hat Perl eine Funktion namens rename, zu der Du mehr unter perldoc -f rename erfahren kannst.

In diesem Fall bist Du aber an der ganz flaschen Adresse. Weder handelt es sich hier um Perl, noch um dessen rename-Funktion.

Schau Dich entweder in einem Windows-Forum um, oder frage einfach direkt bei Novell nach, wo Du auch das Skript her hast.
(oder verwende mein Skript, das tut wenigstens das gewünschte)\n\n

<!--EDIT|Relais|1126777347-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
themiwi
 2005-09-15 14:10
#58016 #58016
User since
2005-09-15
4 Artikel
BenutzerIn
[default_avatar]
o doch, das rename ist perl. wenn ich in meiner bash "rename" eingebe, kommt ein perl skript (auch "vi `which rename`" führt zu einem perl skript.
und warum um gottes willen windows??? ich weiss ja nicht, aber wenn ich von perl und bash rede, bin ich glaub ich schon in linux (oder zumindes *nix)....
Relais
 2005-09-15 14:29
#58017 #58017
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=themiwi,15.09.2005, 12:10]o doch, das rename ist perl. wenn ich in meiner bash "rename" eingebe, kommt ein perl skript (auch "vi `which rename`" führt zu einem perl skript.
und warum um gottes willen windows??? ich weiss ja nicht, aber wenn ich von perl und bash rede, bin ich glaub ich schon in linux (oder zumindes *nix)....[/quote]

Hmm, was bedeutet das denn, wenn Perl-Skripte "kommen", oder gar der VI Dich zu einem Perl-Skript führt?

Wenn sich denn ein Per-Skript als /usr/bin/rename bei Dir findet, dann könntest Du mal nach dessen Doku schaun.

Ansonsten gibt es ein supermächtiges Perl-Skript von einem gewissen Herrn Larry Wall, das so bekannt ist, dass auch Google es (und seine Doku) findet. Vielleicht ist ja genau dieses in Deinen /usr/bin-Tree gewandert?

Für mich sieht die Welt da anders aus, und hätte ich nicht schon geholfen, dann könnte ich leider nicht allzuviel weiter helfen ;P

Quote
> which rename
/usr/bin/rename
> file /usr/bin/rename
/usr/bin/rename: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
> ls -l /usr/bin/rename
-rwxr-xr-x 1 root root 4540 2004-05-27 16:55 /usr/bin/rename
> man rename
Formatiere rename(1) neu, bitte warten...
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
Dubu
 2005-09-20 16:01
#58018 #58018
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Tja, Linux ist eben nicht gleich Linux. :)

Ueber dieses Problem bin ich auch schon mal gestolpert: SuSE liefert ein anderes rename(1) mit als Debian, aber beide heissen gleich. Ich weiss nicht, was andere Distributionen mitliefern. Debian jedenfalls hat eine Variante des Skriptes von Larry Wall, SuSE dagegen - wie Relais auch bemerkt hat - ein Binary (unbekannter Herkunft).

Leider unterscheiden sich die beiden Programme nicht nur in der Quelle, sondern auch in der Syntax:
SuSE-Version: rename from to file(s)
Debian-Version: rename perlexpr file(s)

Der Aufruf
rename @ - *
in der "SuSE-Syntax" entspraeche damit am ehesten einem
rename 's/\@/-/g' *
in der "Debian-Syntax".

Im Gegensatz zu dem, was Novell auf der Seite behauptet ("For all Linux users"), erwartet ihr Skript das SuSE rename(1) und laeuft deshalb nicht bei allen Linuxbenutzern...
themiwi
 2005-09-20 16:06
#58019 #58019
User since
2005-09-15
4 Artikel
BenutzerIn
[default_avatar]
super! danke dir, jetzt weiss ich endlich was los ist (hatte ja kein suse zum vergleichen...)!
<< >> 9 Einträge, 1 Seite



View all threads created 2005-09-15 01:42.