Ändern Sie mehrere Dateinamen, indem Sie ein Zeichen ersetzen

29

Ich habe mehrere Dateien mit dem Namen " that : screenshot 13:25.png
Windows", die möglicherweise aufgrund des ":" Probleme beim Öffnen dieser Dateien haben.

Wie kann ich es ersetzen?

user236152
quelle
2
Können Sie vielleicht eine Antwort akzeptieren, um die Frage als gelöst zu markieren? Dies wird anderen Benutzern sehr helfen.
MERose

Antworten:

52

In einem Terminal cdin das richtige Verzeichnis und dann diesen ausführen.

rename 's/\:/-/g' *.png -vn

Dies zeigt eine Vorschau des Umbenennens an. Es sollte ersetzen :mit -.

Wenn das richtig aussieht, entfernen Sie das nvom Ende und dann wird die eigentliche Umbenennung durchgeführt.

Hinweis : Ubuntu-Versionen über 17.04 werden nicht mit ausgeliefert rename, sind jedoch in den Standard-Repositorys verfügbar. Verwenden sudo apt install renameSie diese Option, um sie abzurufen

Oli
quelle
Vielen Dank für Ihre Antwort. Ich habe versucht, und ich habe dieses Problem: Substitutionsmuster nicht bei (Eval 1) Zeile 1 beendet.
user236152
@ user236152 Tut mir leid, ich bin ein bisschen verrückt geworden mit den flüchtigen Backslashes (war auf Autopilot!). Ein paar entfernt und es sollte jetzt gültig sein.
Oli
Vielleicht könnte ein einfaches Nautilus-Skript , das alle Zeichen ersetzt, die auf anderen Plattformen Probleme verursachen könnten (und auf allen ausgewählten Dateien ausgeführt werden), für "Multiplattform-Benutzer" nützlich sein.
Sadi
2
Warum es benutzen? Es zeigt Ihnen, was es tut (macht es einfacher, rückgängig zu machen, wenn Sie einen Fehler machen). Warum am Ende? Nur damit Sie es (oder das n) leicht entfernen können.
Oli
1
@nightcrawler Du solltest in der Lage sein, Ersetzungen vollständig zu ketten:rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Oli
10

Hier ist eine reine Bash-Lösung:

for i in *:*; do
    mv "$i" "${i//:/_}"
done

Das ${var//pattern/replacement}Format ersetzt alle Vorkommen von patternmit replacementin der Variablen $var. Weitere Informationen zur String-Manipulation von bash finden Sie hier .

Wenn Sie dies für mehrere Zeichen tun möchten, können Sie sie einfach in eine Zeichenklasse einfügen. So zum Beispiel, zu ersetzen , alle ;, :, =, +, %, ,mit Unterstrichen, könnten Sie tun:

$ ls 
1foo:bar  2foo:bar:baz  3foo;bar  4foo=bar  5foo%bar  6foo,bar  7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar  2foo_bar_baz  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar

Grundsätzlich ist die Idee das [ ]heißt any of the characters listed. Wenn Sie also alle Zeichen, die Sie ersetzen möchten, in die Zeichenklasse einfügen, werden alle Zeichen gleichzeitig behandelt.


Für die spezifischen Zeichen , die Sie gefragt, sind die Dinge ein wenig komplexer , da einige von ihnen werden müssen entkommen (ich ignorierte die /da * nix erlaubt es in Dateinamen nicht mehr als Windows tut , so dass nicht ein sein wird Problem):

$ ls
1foo<bar  2foo>bar  3foo:bar  4foo\bar  5foo|bar  6foo*bar  7foo?bar  8foo"bar  9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar  2foo_bar  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar  8foo_bar  9foo_bar

Beachten Sie, dass ich dem entkommen bin \, 'und "indem ich \vor jedem einen Buchstaben hinzufüge .

terdon
quelle
Kann dies verbessert werden, um mehrere einzelne Zeichen (z. B. alle Zeichen, die von Windows nicht akzeptiert werden) durch andere zu ersetzen?
Sadi
1
@ Sadie siehe aktualisierte Antwort.
Terdon
Grundsätzlich gibt es neun: "<>:" / \ | ? * "
Sadi
@ Sadie siehe aktualisierte Antwort.
Terdon
Dank dieser Funktion kann ein Nautilus-Skript erstellt werden , mit dem die Namen ausgewählter Dateien mit Windows kompatibel gemacht werden.
Sadi
2

Wenn Sie eine GUI bevorzugen, installieren Sie Pyrenamer:

sudo apt-get install pyrenamer

Dann führe es aus:

pyrenamer

Es gibt Dutzende Optionen für Muster und das Umbenennen von Formaten.

animaletdesequia
quelle
1

Ich bevorzuge GUI aber als Nautilus Extension, also Nautilus Actions Extra :

sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q

(Siehe www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )

Wenn Sie dann die umzubenennenden Dateien auswählen und im Kontextmenü auf Umbenennen klicken, stehen Ihnen viele Optionen zum Umbenennen von Dateien zur Verfügung.

Sadi
quelle
0

Das renameutilsPaket enthält ein praktisches Programm, qmvdas interaktive Batch-Umbenennungen ermöglicht. Sie führen es in einem Verzeichnis oder einer Liste von Dateien aus, und es generiert eine temporäre Textdatei mit ihren Dateinamen und startet Ihren bevorzugten Editor. Wenn Sie den Editor verlassen, werden alle von Ihnen geänderten Dateinamen entsprechend umbenannt. qmvVerwandelt ein Batch-Umbenennungsproblem in ein Textbearbeitungsproblem.

In diesem Fall können Sie qmv -f do *:*die Namen aller Dateien bearbeiten, die einen Doppelpunkt enthalten, und dann den :%s/:/_/gBefehl in Vim (oder ein entsprechendes Suchen und Ersetzen in dem von Ihnen verwendeten Editor).

Die -f doOption legt fest, dass das Format der Textdatei nur den Namen der Zieldatei enthält, wodurch das Suchen und Ersetzen einfacher wird. Das Standardformat enthält zwei Kopien des Dateinamens in jeder Zeile, und Sie bearbeiten nur die zweite. Dies ermöglicht es, das Richtige zu tun, wenn Sie Zeilen in der Datei gelöscht oder neu angeordnet haben, dies ist jedoch nicht immer die einfachste. Es gibt auch andere Formate.

Mit qmvkönnen Sie stattdessen die generierte Datei über einen Befehl Ihrer Wahl weiterleiten, z. B. sedwenn Sie die interaktive Funktion nicht möchten.

Dan Hulme
quelle
0

Und hier ist ein Nautilus - Skript , dass ersetzt (alle?) Windows-inkompatiblen Zeichen mit einem Bindestrich in allen Dateinamen ausgewählt (basierend auf der Antwort von terdon ;-)

#!/bin/bash
filesall=""
while [ $# -gt 0 ]
    do
        files=`echo "$1" | sed 's/ /\?/g'`
        filesall="$files $filesall"
        shift
    done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done
Sadi
quelle
0

Thunar (der XFCE-Dateimanager) hat eine nette eingebaute Funktion zum Umbenennen von Dateien in großen Mengen. Es bietet Optionen zum Entfernen / Ersetzen von Zeichen, Suchen und Ersetzen, Nummerieren von Dateien und mehr.

Installieren Sie thunar:

sudo apt-get install thunar

Öffne thunar, navigiere zu deinen Dateien, wähle sie aus und wähle "Umbenennen" (über das Kontextmenü oder F2)

user154126
quelle
0
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit
TekWiz2010
quelle
Dies funktioniert gut und hat eine variable Eingabeaufforderung ...
Benennen Sie
3
Dies ist möglicherweise korrekt, verwendet jedoch eine Windows-Batch-Skriptsprache. Wir sind auf AskUbuntu, einer Site für Ubuntu-bezogene Fragen und damit Ubuntu-bezogene Tools. Ich bin der Meinung, dass diese Antwort hier nicht unbedingt zutreffend sein muss.
Sergiy Kolodyazhnyy
Sie müssten es über Wine ausführen , aber es ist wahrscheinlich möglich, dies unter Ubuntu auszuführen ... Es ist nur eine seltsame Antwort, das ist alles.
Oli