Linux mit Parametern und Leerzeichen umbenennen?

1069
Torben Gundtofte-Bruun

Kann man unter Linux eine Datei von etwas ohne Leerzeichen in etwas umbenennen, das Leerzeichen enthält?

Ich weiß, dass ich Verzeichnisse und Dateien mit Leerzeichen erstellen kann, indem Sie Folgendes tun:
mkdir "new dir"und:
touch "new file.txt"

Ich möchte Dateien umbenennen von:
imgp0882.jpgin etwas wie:
20091231 1243 some topic.jpg

Und wie wäre es in einem Shell - Skript suchen, die Parameter wie verwendet: ?
for i in *.jpg do
rename "$i" "$somepath/$mydate $mytime $mytopic$extension"

Ein kleiner Hintergrund:

  • Ich bin neu in Linux (mit PCLinuxOS 2009.2) und komme aus Windows. Ich habe mir ein kleines Shellskript geschrieben, mit dem ich Dateien von meiner Kamera herunterladen und dann automatisch nach einem Datums- und Themenmuster umbenennen kann. Wie Sie sich inzwischen vorstellen können, bin ich beim Umbenennen ganz auf der Spur.
  • Wenn Sie mein Skript sehen wollen, hier eine Kopie .
  • Ich benutze jheaddiese Umbenennung nicht, da dies nur mit JPEG-Dateien funktioniert, aber ich möchte eine einzige Lösung für jedes Medienformat, einschließlich Videos.
0
Sie sollten wissen, dass die * Vorgänge * von Verschieben und Umbenennen in Linux grundsätzlich gleichwertig sind und beide mit "mv" ausgeführt werden. Der Befehl namens "rename" dient zum Umbenennen eines ganzen Stapels von Dateien nach einem bestimmten Muster. Sein Einsatz ist komplexer. Ryan Thompson vor 14 Jahren 0
Danke, das ist ein großartiger Kommentar, da er sich sehr von den (nicht) gleichen DOS / Windows-Befehlen unterscheidet. Natürlich ist "mv" der Weg zu gehen. Torben Gundtofte-Bruun vor 14 Jahren 0

2 Antworten auf die Frage

2
Broam

Wenn Sie bash verwenden, gehen Sie mit den Backslash-Flüchen in Ihre Leerzeichen:

My\ File\ Name.jpg

In einem Skript wäre das also: $ inputfile $ date \ $ time \ topic $ ext umbenennen? Ich glaube, ich habe es ausprobiert und es wurde einfach nicht umbenannt, es wurde auch kein Fehler ausgegeben. Ich werde es noch einmal versuchen und mich erneut melden. Torben Gundtofte-Bruun vor 14 Jahren 0
2
whitequark

Vielleicht müssen Sie nur den gesamten Zielpfad in Anführungszeichen setzen ? Z.B

$ touch test $ a=one $ b=two $ mv "test" "$a $b" $ ls -la total 8 -rw-r--r-- 1 whitequark whitequark 0 2010-01-27 01:21  -rw-r--r-- 1 whitequark whitequark 0 2010-01-27 01:20  drwxr-xr-x 2 whitequark whitequark 4096 2010-01-27 01:21 . drwxr-xr-x 80 whitequark whitequark 4096 2010-01-27 01:16 .. -rw-r--r-- 1 whitequark whitequark 0 2010-01-27 01:21 one two 
ach, der Umzugsbefehl anstelle von Umbenennen ist ein schöner Trick. Ich werde sehen, ob ich diese Arbeit in meinem Skript machen kann. Torben Gundtofte-Bruun vor 14 Jahren 0
"Umbenennen" wird zum Umbenennen von Dateien nach regulären Ausdrücken verwendet. Es ist keine Standardmethode, Dateien auf * nix trotz des Namens umzubenennen, nicht einmal ein Standardwerkzeug: Es wird von Perl bereitgestellt. Weitere Informationen finden Sie unter "Man Rename". http://superuser.com/questions/70217/is-there-a-linux-command-like-mv-but-with-regex ist eine Frage, die für Sie direkt entgegengesetzt ist. Beachten Sie die erste Antwort. whitequark vor 14 Jahren 1