Ich habe eine Sammlung von Dateien, die einem Muster entsprechen, wie z. B. 'Zuordnung02.cc', 'Zuordnung02.h', 'Zuweisung02.txt' usw. Ich möchte diese Dateien in 'Zuordnung03.cc', 'Zuweisung03 "kopieren / umbenennen. h ',' assign03.txt 'und so weiter.
Ich vermute, dass dies mit einem Shell-Skript und sed einfach sein sollte. Bisher habe ich:
OLD_NO=$1
NEW_NO=$2
echo "Moving from $OLD_NO to $NEW_NO"
for name in assignment$OLD_NO.* ; do
newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/')
echo "$name -> $newname"
# mv -v $name $newname
done
Leider gibt die Art und Weise, wie ich sed aufrufe, immer die Eingabezeichenfolge zurück $name
und führt das Regex-Suchen / Ersetzen nicht durch.
Hinweis: Im Internet gibt es einen rename
Befehl mit dieser Funktionalität, der jedoch auf meinem MacBook nicht verfügbar ist.
shell-script
sed
file-management
rename
Gilles 'SO - hör auf böse zu sein'
quelle
quelle
$OLD_NO
und$NEW_NO
wird nicht erweitert erhalten.newname=$(echo $name | tr $OLD_NO $NEW_NO)
Antworten:
Die Verwendung von sed führt zu mehr Komplexität als es wert ist. Verwenden Sie die integrierten Textbearbeitungsfunktionen der Shell. Entfernt beispielsweise
${name#assignment02}
das Präfixassignment02
von$name
.Die doppelten Anführungszeichen sind nicht erforderlich, wenn Sie sicher sind, dass die Dateinamen keine Shell-Sonderzeichen enthalten.
Wenn Sie zsh zur Verfügung haben, ist seine
zmv
Funktion für diese Art von Umbenennungen hilfreich.quelle
Du denkst schon zu komplex
'umbenennen' ersetzt das erste Argument ('02') durch das zweite Argument ('03') im Namen aller Dateien, die auf arg3 oder danach angegeben sind (* 02 *)
quelle
rename
Befehl mit dieser Syntax ist ein Linux-Dienstprogramm, das unter OSX nicht verfügbar ist (und in den meisten Debian- und Ubuntu-Installationen nicht einmal unter diesem Namen verfügbar ist).Ein anderer Versuch:
Auf lange Sicht: Versuchen Sie, "umzubenennen"
quelle
Eine Möglichkeit, dies zu tun, ist:
quelle
ls
. Das Generieren eines Shell-Skripts ist ein sicherer Weg, sich in den Kopf zu schießen. Die Frage von Vault Boy enthält einen vernünftigen Ansatz auf der Muschelseite, bei dem nur die richtige Beschwörung und einige Zitate fehlen.