2016-07-05 16 views
0

Ich versuche, eine Zeichenfolge an den Anfang vieler Dateien hinzuzufügen, eine neue Dateierweiterung zu erstellen, während der Dateiname beibehalten wird.Batching & CAT Befehl

cat string.txt file001.old > file001.new 
cat string.txt file002.old > file002.new 
cat string.txt file003.old > file003.new 
etc... 

Ich habe versucht zu Charge durch:

for i in *.old 
do 
    cat string.txt $i > $i.new 
done 

Aber das nur knapp sein Ziel genau arbeiten, sind meine Fähigkeiten begrenzt ... Vielen Dank im Voraus für jede Hilfe.

+1

Was nicht funktioniert? Ist 'string.txt' eine Datei (falls nicht, müssen Sie die Zeichenfolge 'echo'). Oder haben Sie neue Dateien mit Namen wie 'file002.old.new'? Oder haben Sie Dateinamen mit Leerzeichen, die durcheinander geraten? –

Antwort

0

Oder diese kürzere Alternative

for i in *.old 
do 
    echo string.txt | cat - $i > ${i%old}new 
done 

oder sogar mit heredoc statt Rohr

for i in *.old 
do 
    cat - $i <<<string.txt> ${i%old}new 
done 
+0

Ich habe die 1. Methode verwendet, aber ich musste erneut die Punktzeichen verwenden, damit sie fehlerfrei funktioniert. echo string.txt | cat - "$ i"> "$ {i% alt} new" – NeMesiS

+0

Wahr, aber ich habe die Anführungszeichen nicht hinzugefügt, da sie nicht im ursprünglichen Beispiel waren –

0

Es gibt mehrere Möglichkeiten, dies zu tun. Dies kann am einfachsten sein:

for i in *.old 
do 
    echo string.txt > ${i%old}new 
    cat $i >> ${i%old}new 
done 
0

Danke Jungs ... Ich habe vergessen, die Satzzeichen hinzufügen , Sollte in etwa so aussehen:

for i in *.old 
do 
    cat string.txt "$i" > "$i".new 
done 

Die Ausgabe würde so aussehen „file002.old.new“ Wo ich SED verwendet, um die alte extention zu entfernen, aber ich werde auf jeden Fall die alternativen Methoden

Danke nochmal versuchen, Nem