2016-06-10 2 views
2

Ich habe eine Reihe von XML-Dateien im Ordner Projekt/Berichte. Aus dem Ordner "Projekt" muss ich die Zeichenfolge "TEST-" jeder .xml-Datei im Ordner "reports" voranstellen. Ich weiß, dass jede .xml-Datei mit derselben Zeichenfolge beginnt und mit .xml endet, aber ich kenne die Mitte nicht. Wie mache ich das?Wie füge ich eine Zeichenfolge an den Anfang des Namens einer Auflistung von Dateien in einem anderen Verzeichnis mithilfe der Shell

dh. Originaldatei: constantfilename.xml, Neue Datei: TEST-constantfilename.xml

Ich kann die Namen des Tests selbst nicht fest codieren, es muss nur die Zeichenfolge zu allen Dateien in dem Ordner mit der Erweiterung hinzufügen können .xml. Ich habe für die Umbenennung der Dateien im aktuellen Ordner wie dies eine Menge von Methoden gesehen:

for f in *.xml 
do 
    mv "$f" "TEST-$f" 
done 

aber ich verstehe nicht, wie ich diese anwenden kann, wenn ich sie aus einem anderen Verzeichnis ändern muß.

Jede Hilfe würde sehr geschätzt werden! Und bevor jemand fragt, nein, ich kann nicht einfach zu diesem Ordner navigieren, er muss aus dem "Projekt" -Ordner stammen.

+0

Wäre es eine Option, das Skript unter Zsh anstelle von bash auszuführen? In diesem Fall wäre es einfach "mv $ f $ f: h/TEST- $ f: t". – user1934428

Antwort

1

Sie können die folgenden Einzeiler (vorausgesetzt, Sie sind auf dem Projektordner) verwenden:

ls reports/*xml | awk -F '/' '{print "mv "$0" "$1"/TEST-"$2}' | sh

wie Sie nicht so sauber ist, aber es soll das gleiche Ergebnis.

+0

Könnten Sie das vielleicht erklären? Was macht awk? – annedroiid

+0

Sicher. Das 'ls' erstellt eine Liste von Dateien und das Symbol' | 'sendet diese Liste an' awk', was in diesem Fall als Textverarbeitungswerkzeug verwendet wird. Der 'print' Befehl assembliert die Ausgabe, und der' sh' führt sie aus. Wenn Sie neugierig sind, entfernen Sie die '| sh' und sehen, was auf dem Bildschirm gedruckt wird. –

2

Nach viel Googeln habe ich das getan. Es sucht nach der Zeichenfolgekonstante, von der ich weiß, dass sie vorne in meiner Datei ist, und ersetzt sie durch TEST-Konstante.

for f in project/reports/*.xml 
do 
    a="$(echo $f | sed s/constant/TEST-constant/)" 
    mv "$f" "$a" 
done 
Verwandte Themen