Eine Zeichenfolge aus Dateinamen entfernen/löschen

Eine Zeichenfolge aus Dateinamen entfernen/löschen

Ich habe eine Reihe von Textdateien, die www.thethinkfoundation.orgbeispielsweise mit der folgenden Zeile enden:

file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.

file100.www.thethinkfoundation.org.txt

Ich möchte entfernen/löschenwww.thethinkfoundation.org

Um dies zu erreichen, habe ich den folgenden Befehl in einem Terminal ausprobiert:

for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done

Das Ergebnis war:

file1..txt
file2..txt
.
.
.

file100..txt

Vielen Dank im Voraus für eine funktionierende Lösung.

PS: Ich möchte den Befehl nicht verwenden rename. Ich suche eigentlich nach einem, der unter Linux- und *BSD-Distributionen funktioniert. Mein bevorzugter Texteditor ist nano.

Antwort1

Teilstring-Ersetzung basierend aufShell-Parametererweiterungin bashund einigen anderen Shells kann auf zwei Arten erreicht werden:

Erstekönnen Sie ersetzennur das erste Vorkommen(von links nach rechts) eines Musters wie diesem:

${var/pattern/replacement}

Zweitekönnen Sie ersetzenalle Vorkommeneines Musters wie diesem:

${var//pattern/replacement}

Dabei varhandelt es sich um die Variable/den Parameter, der die Zeichenfolge enthält, und patternum das Muster, das Sie in dieser Zeichenfolge suchen und ersetzen möchten, sowie replacementum den Ersatz, patterndurch den Sie das ersetzen möchten. Dieses Feld kann auch leer gelassen werden, ${var//pattern/}wenn Sie also einfach dieses Muster aus der Zeichenfolge löschen möchten.

Ihre Wunschlösung würde daher wie folgt aussehen:

for f in *www.thethinkfoundation.org*; do
    echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done

Ich habe es echofür einen Probelauf hinzugefügt, damit Sie es zuerst testen und dann herausnehmen echound erneut ausführen können, um die eigentliche Arbeit zu erledigen.

verwandte Informationen