Ich benutze Linux Slackware 14.0, Bash 4.2. Angenommen, ich habe 2 Dateien im Verzeichnis:
bash-4.2$ ls
1.txt 2.txt
Ich möchte sie in .svg umbenennen. Diese Antwort wird akzeptiert und positiv bewertet, daher denke ich, dass sie funktionieren muss. Er benutzte diesen Befehl:
find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \;
Also habe ich den analogen Befehl geschrieben, aber er hat einen Fehler ausgegeben:
bash-4.2$ find . -name "*.txt" -exec rename -v 's/\.txt$/\.svg/i' {} \;
rename: not enough arguments
Wenn ich nur die Dateien drucken möchte, funktioniert es:
bash-4.2$ find . -name "*.txt" -print
./1.txt
./2.txt
Ich weiß, dass ich mit einem einfacheren Ansatz umbenennen kann:
bash-4.2$ rename .txt .svg ./*.txt
bash-4.2$ ls
1.svg 2.svg
Aber warum funktioniert der Befehl aus dieser Antwort bei mir nicht?
perl
(was diese Antwort voraussetzt) und die von util-linux (die Sie haben).find . -name '*.txt' -exec rename .txt .svg {} +
info --index-search=-exec find
Antworten:
Bei
rename
Linux-Distributionen werden zwei Befehle aufgerufen . Es gibt eines der grundlegenden Linux-Dienstprogramme , das wie folgt verwendet wird:Dieser Befehl ersetzt das erste Auftreten von SUBSTRING durch REPLACEMENT in jeder der angegebenen Dateien. Es werden nur einfache Zeichenfolgen unterstützt, keine Platzhalter oder regulären Ausdrücke. Unter Debian und Derivaten (Ubuntu, Mint usw.) wird dieser Befehl aufgerufen
rename.ul
. Auf anderen Linux-Distributionen heißt esrename
.Es gibt auch ein Perl-Skript,
rename
das wie folgt verwendet wird:Eine gebräuchliche Form des Perl-Codes ist
rename 's/REGEXP/REPLACEMENT/' FILE...
, dass das erste Auftreten von REGEXP durch REPLACEMENT in jedem Dateinamens/REGEXP/REPLACEMENT/g
ersetzt wird ( ersetzt alle Vorkommen).Der Autor der Frage, die Sie gesehen haben, gab an, dass er Ubuntu ausführt, daher akzeptierte er diese Antwort mit dem
rename
auf Ubuntu gefundenen Befehl.Das Analogon für den Standardbefehl
rename
istMit bash ≥4 können Sie das
**
Platzhaltermuster verwenden, nachdem Sie dieglobstar
Option zum Abgleichen von Dateien in Unterverzeichnissen ohne Verwendung festgelegt habenfind
.Beachten Sie, dass dieser
rename
Befehl auf die erste Zeichenfolge angewendet wird. Wenn Sie also eine Datei mit dem Namen habenhello.txt.world.txt
, wird diese in umbenannthello.svg.world.txt
.quelle