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
Antwort
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 find
has its own facilities auch Operationen auf gefundenen Ressourcen ausführen können.
Was ist falsch mit 'mv stdout-captured stdout-expected' usw.? – Philipp
nicht klar. Bitte erläutern Sie besser, was Sie brauchen. – dAm2K
ist es "status-capture" oder "status-captured" (wie die anderen) – dldnh