2012-03-24 20 views
-6

Im Moment habe ich einige Probleme. Ich finde einen Weg, um ein Problem zu lösen. Ich habe eine Datei in der Baumstruktur, deren Namen stdout-captured, stderr-captured und status-capture sind, und ich muss diese Dateien in stdout-expected, stderr-expected und status-expected umbenennen. Danke für Ihre Hilfe.Einige Probleme mit sed und awk

+4

Was ist falsch mit 'mv stdout-captured stdout-expected' usw.? – Philipp

+0

nicht klar. Bitte erläutern Sie besser, was Sie brauchen. – dAm2K

+0

ist es "status-capture" oder "status-captured" (wie die anderen) – dldnh

Antwort

2

Von dem, was wir von dieser Frage erkennen kann, sind versuchen Sie eine programmatische Regel zu erstellen, Dateien in Erweiterungen Endung umbenennen stdout-captured, stderr-captured und status-captured (ein Tippfehler angenommen wird) in Dateien in Erweiterungen endet stdout-expected, stderr-expected und status-expected , beziehungsweise. Offensichtlich, wenn jede dieser Definitionen genau eine Datei enthält, kann eine rote mv geeigneter sein.

Übersetzung Sie mit sed wünschen ausführen zu können, rufen Sie einfach die folgende in /bin/bash mit dem gewünschten Ziel als Ihr aktuelles Arbeitsverzeichnis:

EXTENSION=stdout-captured 
REPLACEMENT=stdout-expected 
for arg in $(ls *.$EXTENSION); \ 
    do mv $arg $(echo $arg | sed s/\\.$EXTENSION/.$REPLACEMENT/); \ 
    done 

... wo $EXTENSION und $REPLACEMENT für jeden der Fälle definiert werden die Sie erkennen und ersetzen möchten. Dies setzt voraus, dass keine Dateien .$EXTENSION irgendwo im Rest des Dateinamens enthalten. awk ist für diese Lösung nicht erforderlich.

Um dies rekursiv über mehrere Verzeichnisse hinweg zu aktivieren, erwägen Sie, ls durch find zu ersetzen und die Regel entsprechend zu aktualisieren. Beachten Sie, dass findhas its own facilities auch Operationen auf gefundenen Ressourcen ausführen können.

Verwandte Themen