Dateien in einem bestimmten Verzeichnis schrittweise umbenennen?

7

Ich habe ein Verzeichnis mit einer Reihe von .txtDateien. Ich benötige einen Befehl, um diese Dateien mit einem Befehl umzubenennen. Der Name lautet also:file1.txt , file2.txt, file3.txt , etc .

Irgendeine Hilfe ?

nux
quelle
Stört es Sie, wenn es sich um ein Python-Skript handelt?
Stormvirux
Das Skript sollte im Terminal ausgeführt werden, aber Sie können Ihr Skript schreiben.
Nux
2
for i in *.txt; do echo mv "$i" "file${i#file}"; done
Fakhri Zulkifli

Antworten:

20

Sie können dies im Terminal verwenden, um Dateien nach Ihren Wünschen umzubenennen.

j=1;for i in *.txt; do mv "$i" file"$j".txt; let j=j+1;done

Es wird den Job machen.

Erläuterung:

  • Stellen Sie einen Zähler ein jund setzen Sie ihn zunächst auf 1
  • Initiieren Sie eine for-Schleife und verwenden Sie einen Shell-Glob *.txt, um alle txtDateien abzurufen .
  • Benennen Sie sie für jede Datei mit um mvund erhöhen Sie den Zähler um 1.
Souravc
quelle
1
Kannst du deinen Befehl erklären?
Nux
@nux sehen Sie die Änderungen und zögern Sie nicht, bei Bedarf zu diskutieren.
Souravc
ok danke, ich werde es als richtige Antwort betrachten, ich habe ein kleines Skript gefunden, das auch meine Bedürfnisse befriedigt.
Nux
7

Sie können den Befehl zum Umbenennen verwenden, der normalerweise in einer Standardinstallation enthalten ist:

c=0 rename 's/.*/sprintf("file%05d.txt", ++$ENV{c})/e' *

Verwenden Sie das Flag -n, wenn Sie zuerst einen Test durchführen möchten:

c=0 rename -n 's/.*/sprintf("file%05d.txt", ++$ENV{c})/e' *

Dies funktioniert so, dass für jedes Argument der Perl- s///Ausdruck ausgeführt und die Umbenennung vom Original in die ersetzte Zeichenfolge durchgeführt wird. In der Ersatzzeichenfolge sprintfformatiere ich den Namen, wobei ich die Umgebungsvariable cals Zähler von 1 verwende.

In den meisten Fällen benötigen Sie möglicherweise auch eine führende "0" für jede Zahl. Dies %05dist der Trick, bei dem 5 die Anzahl der Ziffern ist.

Janos
quelle
1
Tolles Beispiel, sollte eine Top-Antwort sein. Mit %05danstelle von können %dSie einen führenden 0Namen mit 5 Ziffern hinzufügen .
Kostanos
2

Der folgende Befehl benennt Dateien auch schrittweise um:

cd (directory containing files )

Führen Sie dann dieses Skript aus:

count=1
for i in *; do
    mv "${i}" file${count}.`echo "${i}" | awk -F. '{print $2}'`
    ((++count))

done 
nux
quelle