Umbenennen mit find - linux, shell

Ich habe mit dem Befehl find mehrere Dateien gefunden. Die Dateien sind vom Typ Datei_sakfksanf.txt, Datei_afsjnanfs.pdf, Datei_afsnjnjans.cpp, jetzt möchte ich sie mit dem rename und -exec Befehl umbenennen mywish_sakfksanf.txt, mywish_afsjnanfs.pdf, mywish_afsnjnjans.cpp dass nur das erste Präfix geändert wird. Ich versuche es einige Zeit, also beschuldige mich nicht, dumm zu sein.

Antworten:

5 für die Antwort № 1

Wenn du das durchliest -exec Abschnitt der man Seiten für find du wirst auf die kommen {} Zeichenfolge, mit der Sie die Übereinstimmungen als Argumente verwenden können -exec. Dies ermöglicht Ihnen zu verwenden rename auf Ihrem find passt auf folgende Weise überein:

find . -name "file_*" -exec rename "s/file_/mywish_/" {} ;

Aus dem Handbuch:

-exec Befehl ;

Befehl ausführen; Wahr, wenn 0 Status zurückgegeben wird. Alle folgenden Zu suchende Argumente werden als Argumente für den Befehl verwendet, bis ein Argument bestehend aus ;" is encountered. The string{}" ist ersetzt indem der aktuelle Dateiname istverarbeitet überall dort, wo es in der Argumente für den Befehl, nicht nur in Argumenten, wo es allein ist, als in einigen Versionen von finden. Beide Konstruktionen müssen möglicherweise entkomme (mit einem "") oder zitiert werden, um sie vor der Erweiterung zu schützen die Muschel. Beispiele für die Verwendung des. Finden Sie im Abschnitt BEISPIELE -exec-Option. Der angegebene Befehl wird für jede übereinstimmende Datei einmal ausgeführt. Der Befehl wird im Startverzeichnis ausgeführt unvermeidbare Sicherheitsprobleme im Zusammenhang mit der Verwendung der Aktion -exec; Sie sollten stattdessen die Option -execdir verwenden.

Obwohl Sie nach einer find / exec Lösung gefragt haben, wie Mark Reed vorgeschlagen, sollten Sie in Betracht ziehen, Ihre Ergebnisse zu pumpen xargs. Wenn Sie dies tun, stellen Sie sicher, dass Sie die -print0 Option mit find und entweder die -0 oder -null Option mit xargs um ein unerwartetes Verhalten zu vermeiden, das auf Leerzeichen oder Shell-Metazeichen in Ihren Dateinamen zurückzuführen ist. Ziehen Sie auch die Verwendung der + Version von -exec (auch im Handbuch), da dies die POSIX-Spezifikation für find und sollte daher portabler sein, wenn Sie Ihren Befehl anderswo ausführen wollen (nicht immer wahr); Es baut auch seine Befehlszeile ähnlich wie xargs was zu weniger Aufrufen von führen sollte rename.


0 für die Antwort № 2

Denken Sie nicht, es gibt einen Weg, wie Sie das tun können, indem Sie nur suchen, Sie müssen ein Skript erstellen:

#!/bin/bash
NEW=`echo $1 | sed -e "s/file_/mywish_/"`
mv $1 ${NEW}

Dann kannst du:

find ./ -name "file_*" -exec my_script {} ;

Am beliebtesten