Ich versuche, eine Reihe von Musiktiteln in einem Verzeichnis umzubenennen, habe jedoch den folgenden Fehler erhalten:
Beim Verschieben mehrerer Dateien muss das letzte Argument ein Verzeichnis sein
Dies ist das Skript:
for file in * ; do
mv $file $(echo $file |sed 's/^.\{5\}//g')
done
Dies funktioniert für eine Datei ohne Leerzeichen. Wie würde ich dieses Skript ändern?
-
. Anstelle vonecho "$file"
Gebrauchprintf '%s\n' "$file"
.mv
. :) Du hast diesen Fall behandelt :) --- Was ich meinte, war ein Problem mit sichecho
selbst. Zum Beispiel druckt GNU-Echo (sowohl Standalone- als auch Bash-Echo) diese Zeichenfolgen nicht :-n
,-e
und-E
. Selbst gemäß der POSIX-Definition ist eineecho
zuverlässige Verwendung nicht möglich, da bestimmte Situationen nicht definiert sind. XSI-konformecho
interpretiert Backslash-Escape-Sequenzen. ---printf '%s\n'
hat keine solchen unerwünschten und implementierungsabhängigen Auswirkungen.Sie können den Vornamen verwenden, der häufig zusammen mit Perl verteilt wird. (In Debian wird beispielsweise / usr / bin / prename vom
perl
Paket installiert .) Wenn es nicht von Ihrer Distribution gepackt wurde (suchen Sie nachprename
undrename
in den herkömmlichen Binärdateien), kann es von einer Reihe von Stellen heruntergeladen werden, z zum Beispiel hier , hier oder hier .Dieses Skript verwendet einen regulären Ausdruck für jeden Dateinamen und eine Reihe von Dateinamen und ändert die Namen dieser Dateien entsprechend diesem regulären Ausdruck.
Zum Beispiel könnten Sie tun
um zu zeigen, was passieren würde, wenn Sie die ersten fünf Zeichen in den Dateinamen entfernen. Um die Umbenennung tatsächlich auszuführen, entfernen Sie einfach die
-n
.quelle