BASH: Vorhandenen Dateiinhalt einer vorhandenen Datei hinzufügen

545

Ich muss den Inhalt einer Datei am Ende jeder prefs.jsDatei hinzufügen . Ich habe es mit versucht, find -name 'prefs.js' -exec more filecontent >> '{}' \;aber es hat nicht funktioniert.

3

5 Antworten auf die Frage

4
knittl

Die Umleitung erfolgt nicht für jede Datei (das ist schwierig). Die Problemumgehung besteht darin, für jede Datei eine neue Shell zu erzeugen:

find -name 'prefs.js' -exec sh -c 'cat filecontent >> $1;' - '{}' \; 

Das -ist notwendig, da es das zeroth ( $0) Argument zu wirdsh

Außerdem müssen Sie catanstelle von mehr verwenden. More ist ein Pager, mit dem Benutzer durch ein Dokument scrollen können.

1
Fredrik Pihl

Verwenden Sie xargs:

find -name 'prefs.js' | xargs -n1 bash -c 'cat content_to_be_added >> $1;' - 
1
aliva
for f in `find -name 'prefs.js'` do echo $f #cat $f >> outfile cat infile >> "$f" done 
Nein, `filecontent` sollte zu jeder Datei` prefs.js` hinzugefügt werden Fredrik Pihl vor 12 Jahren 0
@Fredrik Das wurde behoben. Eroen vor 12 Jahren 0
0
highsciguy

Es funktioniert, um ein kleines Shellskript cbd.sh zu schreiben

#!/bin/bash  echo "filecontent" >> "$1" 

Natürlich können Sie das Echo mit ersetzen

cat "somefile" 

und anrufen

find -name 'cbd[0-9].txt' -exec ./cbd.sh '{}' \; 

im selben Verzeichnis.

Die Syntax des Suchbefehls mit -exec ist ein echtes Monster.

"Die Syntax des Suchbefehls mit -exec ist ein echtes Monster." Zustimmen! vor 12 Jahren 1
0
Eroen

Wie wäre es mit

find -name 'prefs.js' -exec dd if=filecontent conv=notrunc oflag=append of='{}' \; 

Es wird davon ausgegangen, dass filecontentes sich um eine Datei handelt, die enthält, was Sie an die prefs.jsDateien anhängen möchten .