Ich muss eine Reihe von Dateien (ca. 167 KB) umbenennen, und zwar nur einen Teil des Titels in jeder Datei. Von:
Aaaa.bb - 2 tag tag_tag 9tag
Aaaa.bb - 125 tag_tag 9tag
Aaaa.bb - 3567 tag 9tag
An:
Aaaa.bb - 000002 tag tag_tag 9tag
Aaaa.bb - 000125 tag_tag 9tag
Aaaa.bb - 003567 tag 9tag
Alles ist auf einer externen Festplatte. Gibt es ein Tool oder Skript, das mir in dieser Situation helfen kann? Ich habe auch vergessen zu erwähnen, dass ich noch neu in Ubuntu und all dem kniffligen Zeug bin, also werde ich darum bitten, die Antworten zu vereinfachen
Antwort1
Hier ist mein Versuch mit bash
, awk
, und mv
.
Wenn wir den Dateinamen aus der Sicht von awk betrachten, ist der Dateiname nur eine Zeichenfolge mit durch Leerzeichen getrennten Feldern, und von besonderem Interesse ist das Feld $3, das mit Nullen aufgefüllt werden muss. Das folgende Skript macht genau das. Stellen Sie sicher, dass Sie das Skript im selben Verzeichnis wie die Dateien platzieren und ausführen, die Sie umbenennen möchten. Stellen Sie außerdem sicher, dass es mitchmod 755 renamerScript.sh
Demo
testdir:$ ls
Aaaa.bb - 125 tag tag_tag 9tag Aaaa.bb - 2 tag tag_tag 9tag Aaaa.bb - 4207 tag tag_tag 9tag BACKUP/ renamerScript.sh*
testdir:$ ./renamerScript.sh
mkdir: cannot create directory ‘BACKUP’: File exists
cp: omitting directory ‘BACKUP’
renaming Aaaa.bb - 125 tag tag_tag 9tag to Aaaa.bb - 000125 tag tag_tag 9tag
renaming Aaaa.bb - 2 tag tag_tag 9tag to Aaaa.bb - 000002 tag tag_tag 9tag
renaming Aaaa.bb - 4207 tag tag_tag 9tag to Aaaa.bb - 004207 tag tag_tag 9tag
testdir:$ ls
Aaaa.bb - 000002 tag tag_tag 9tag Aaaa.bb - 000125 tag tag_tag 9tag Aaaa.bb - 004207 tag tag_tag 9tag BACKUP/ renamerScript.sh*
Skript
#!/bin/bash
# renamerScript.sh
# Author: Serg Kolo
# Date: Oct 17, 2015
# Purpose : renaming specific files
# Written for: http://askubuntu.com/q/686794/295286
# Make sure you have backup of the files !!!
# comment/uncomment if you do want to do a backup
mkdir BACKUP
cp -t BACKUP *
# This is where the magic happens:
# If we look at filenames from the awk point of view
# "Aaaa.bb - 2 tag tag_tag 9tag" are all really
# space-separated fields. Field #3 is the one we need to edit.
# What we can do is pad it with zeros and then chop off 6
# characters from the end, and store that as new filename
# The rest is just doing mv command from old filename to new
# And also making sure we're operating on files , not directories
# and not renaming the script file,too
for FILENAME in * ;
do
if [ -f "$FILENAME" -a "$FILENAME" != "renamerScript.sh" ]; then
OLDFILENAME="$FILENAME"
NEWFILENAME=$(echo "$FILENAME" | awk '{$3="00000"$3; len=(length($3)-5); $3=(substr($3,len)); print }')
printf "renaming $OLDFILENAME to $NEWFILENAME \n"
mv "$OLDFILENAME" "$NEWFILENAME"
fi
done
Antwort2
Ich würde Python und die Verwendung von regulären Ausdrücken empfehlen. Hier ist ein Beispiel für ein Skript, das ich erstellt habe und das alle Dateien in einem Ordner und Unterordnern ändern kann.
directoryChosen = (sys.argv[1])
print directoryChosen + " thi is inside dollartohash"
if os.path.isdir(directoryChosen):
for n in os.listdir(directoryChosen):
if not n.startswith('.'):
newname = n.replace('$', '#')
print newname
if newname != n:
path = os.path.join(directoryChosen, n)
print path + " this is path"
target = os.path.join(directoryChosen, newname)
print target + " this is target"
os.rename(path, target)
newdir = directoryChosen.replace('$', '#')
print newdir
if directoryChosen != newdir :
os.rename(directoryChosen, newdir)
Wie Sie sehen, wird das Verzeichnis als Argument verwendet und ein Symbol in ein anderes Symbol geändert. Ich bin sicher, dass Sie den Ersetzungsteil ändern können.
Antwort3
Sie können den perl-basierten rename
Befehl verwenden, um die Ziffernfolge nach Leerzeichen-Bindestrich-Leerzeichen im gewünschten Format und mit der gewünschten Feldbreite erneut auszudrucken, z. B.
rename -vn -- 's/ - (\d+)/sprintf " - %06d", $1/e' *
(Das Flag -n bedeutet „keine Operation“, d. h. es wird nur ein Probelauf zum Testen des Ausdrucks durchgeführt: Entfernen Sie es, wenn Sie sicher sind, dass es richtig funktioniert.)
Antwort4
VersuchenpyRenamerder Massendatei-Umbenennungsprogramm, das Dateien anhand von Mustern und Ersetzungen umbenennt, Text einfügt oder löscht oder Dateien sogar manuell umbenennt.
Es verfügt über ein GUI-Fenster mit diesen Funktionen:
- Muster zum Umbenennen von Dateien. Suchen und Ersetzen zum Umbenennen von Dateien. Einfügen und Löschen von Zeichen an beliebiger Stelle im Dateinamen. Großschreibung (Dateinamen in Großbuchstaben erstellen). Gängige Ersetzungen. Manuelles Umbenennen ausgewählter Dateien. Umbenennen von Bildern anhand ihrer Metadaten. Umbenennen von Musik anhand ihrer Metadaten.Quelle
Installieren:sudo apt-get install pyrenamer