2017-09-27 1 views
1

I found this post here, und es funktioniert für das Entfernen alles nach dem Leerzeichen, aber ich kann es nicht rückgängig machen, Batch löschen einen Unterstrich und alles davor in einem Ordner entfernen. Die Anschlussleitung von der Post erwähnt istUmbenennen und entfernen jedes Zeichen vor _ für mehrere Dateien in einem Ordner

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f/_/}"; mv -- "$f" "${s/ *./.}"' _ '{}' \; 

Also muß ich es ein Unterstrich anstelle einen Raum sein, und ich brauche es vor dem Zeichen zu entfernen und nicht nach. Beispielsweise. Wenn eine Datei mit dem Namen ist:

random text _987media.mp4 

Ich will es namentlich genannt werden:

987media.mp4 
+1

Sie müssen bestimmte Beispiele angeben, wie die Transformation aussehen soll. – Inian

+0

Nur aktualisiert die Frage – jons

Antwort

2

können Sie verwenden bash-interne parameter pattern substitution:

$ f='random text _987media.mp4' 
$ echo "${f/*_/}" 
987media.mp4 

alles vor dem letzten Unterstrich zu entfernen, Unterstrich enthalten.

So benennen Sie alle Dateien eines _, in der Masse enthalten:

find . -type f -name "*_*" -exec bash -c 'f="$1"; g="${f/*_/}"; mv -- "$f" "$g"' _ '{}' \; 
+0

Gibt es eine Möglichkeit, dies im Batch zu tun, wenn ich CD in einen Ordner mit vielen Dateien drin? – jons

+1

Ich habe meine Antwort aktualisiert. – randomir

1

Sie Ihre Antwort ändern Parameter-Erweiterung für Unterkette Entfernung zu verwenden.

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f##*_}"; mv -- "$f" "$s"' _ '{}' \; 

sollte einfach ausreichen. Der Teil {f##*_} entfernt den Teil des Strings bis zum letzten _ in Ihrer Datei. Weitere Beispiele finden Sie in diesem Abschnitt substring removal.

+1

Danke, dass Sie darauf hingewiesen haben, wo der Unterstrich gefunden wurde. Das ist der Teil, der mich in der von mir erwähnten Stelle verwirrt hat. – jons

Verwandte Themen