Wie entferne ich die URI-Codierung aus Dateinamen?

7

Mir ist klar, dass dies eine recht einfache Frage sein mag, aber ich bin noch ziemlich neu in der Befehlszeile und verstehe nur grundlegende Befehle.

Ich habe einige Vortragspräsentationen (ca. 25) von meiner Universität heruntergeladen, aber dabei wurden sie Dinge wie ...

L2%20Development%20of%20immune%20system.pptx
L4%20Molecular%20Recognition.pdf

Wie Sie sehen können, haben sie die URL-Codierung %20anstelle eines Leerzeichens heruntergeladen .

Meine Frage ist, wie man alle diese Dateien stapelweise umbenennt, damit sie %20entfernt und stattdessen durch ein Leerzeichen ersetzt werden.

Ben
quelle
Mein Fehler, ich habe versucht zu suchen, aber es muss meinen Bemühungen entgangen sein. Die Antworten hier sind jedoch ziemlich nützlich und gut erklärt.
Ben
3
Und die Frage ist an sich sehr nützlich, wenn sie verallgemeinert wird, um die URI-Codierung rückgängig zu machen.
Stéphane Chazelas
Ebenfalls in der folgenden Frage behandelt: unix.stackexchange.com/questions/159253/… (was mir in gewisser Weise ziemlich doppelt erscheint)
Syntaxfehler

Antworten:

9

Unter Debian und Derivaten (einschließlich Ubuntu) können Sie renameeinen Perl-Ausdruck auf jeden Dateinamen anwenden.

rename 's/%20/ /g' L*
        |  |  | |   |
        |  |  | |   +--- Files to match
        |  |  | +------- globally
        |  |  +--------- with space
        |  +------------ %20
        +--------------- Substitute

Ich würde in Betracht ziehen, Unterstriche anstelle von Leerzeichen zu verwenden, da dies das Leben in der Cli-Welt im Allgemeinen erleichtert.

So verallgemeinern Sie auf alle URI-Codierungen:

rename 'use URI::Escape; $_ = uri_unescape $_' *%*
Runium
quelle
7

Sie können deurlnamevon Renameutils verwenden .

$ ls
L4%20Molecular%20Recognition.pdf
$ deurlname L4%20Molecular%20Recognition.pdf
$ ls
L4 Molecular Recognition.pdf

Ich habe ein Skript geschrieben , mit dem Sie Dateien in einem Editor umbenennen können.

Sie übergeben dem Skript einfach einen Dateinamen und es öffnet Ihren Editor mit dem Dateinamen. Anschließend bearbeiten Sie den Dateinamen, schreiben und schließen den Editor.

$ ls
  L4%20Molecular%20Recognition.pdf
$ viname L4%20Molecular%20Recognition.pdf
  ======================
  L4%20Molecular%20Recognition.pdf█
  ======================

  ======================
  L4-Molecular-Recognition.pdf█
  ======================
  (pretend this is an editor)
$ ls
  L4-Molecular-Recognition.pdf

Ich habe auch ein Skript geschrieben , das Dateien automatisch umbenennt, um meinem bevorzugten Namensschema zu entsprechen. Wenn ich Dateien herunterlade, rufe ich als erstes dieses Skript auf.

$ ls
  L4%20Molecular%20Recognition.pdf
$ nf L4%20Molecular%20Recognition.pdf
  'L4%20Molecular%20Recognition.pdf' renamed to 'l4-molecular-recognition.pdf'
$ ls
  L4-molecular-recognition.pdf

Sei vorsichtig mit diesem Skript. Es kann einige ziemlich dramatische Umbenennungen vornehmen. Verwenden Sie die nf -nOption dry run ( ), bevor Sie Dateien umbenennen.


quelle
4

Sie können convmvin dem Verzeichnis verwenden, in dem Sie die Dateien haben:
So testen Sie die Ausgabe:

convmv --unescape *%20*

Um die Dateien tatsächlich umzubenennen, fügen Sie Folgendes hinzu --notest:

convmv --unescape --notest *%20*
don_crissti
quelle
4

Eine weitere Alternative, die nicht auf externe Tools außerhalb von Bash angewiesen ist:

for old in *; do
    new="${old//+/ }"
    printf -v new '%b' "${new//%/\x}"
    mv -- "$old" "$new"
done
Chris Down
quelle
Gute Antwort, wenn Sie auf dieser Seite auf der Suche nach einer MacOS-Lösung sind (wie ich).
Tim Mackey