2012-04-03 10 views
2

Ich habe eine Liste von Dateien, von denen ich eine Zeile am Ende der Datei hinzufügen möchte. Ich kann nicht den richtigen Weg finden, es zu tun:Lernen Bash: Eine Zeile an die Liste der Dateien anfügen

find . | grep filexxx | xargs << echo "attribute=0000" 

Scheint nicht zu arbeiten, leider. Ohne ein Skript zu schreiben, welches oneliner Kommando würde es tun?

danke!

Antwort

8

Sie finden die Option verwenden: -exec dies mag:

find . -type f -name "file*" -exec bash -c 'echo "your line" >> $1' -- {} \; 

Sie benötigen Datei * zu ändern Dateien anzupassen, die Sie suchen.

Es gibt auch eine andere Möglichkeit:

find . -type f | while read file; do echo "your line" >> $file ; done 

können Sie Rohr

bearbeiten grep oder verwenden -name in der oben finden:

wie von knittl in Kommentaren vorgeschlagen, würden Sie haben Probleme mit dem oben genannten Liner, wenn Ihr Dateiname ein neues Zeilenzeichen enthält .. und eine Lösung von Gordon:

find . -type f -print0 | while IFS= read -r -d '' file; do ... 
+2

Beachten Sie, dass 'finden | while' wird zu Problemen führen, wenn Ihre Dateinamen Zeilenumbrüche enthalten . – knittl

+0

@ Knittl: Richtig; Um Probleme zu vermeiden, verwenden Sie 'find. -type f -print0 | während IFS = read -r -d '' Datei; tu ... 'stattdessen. –

0

Es gibt viele Möglichkeiten, dies zu tun. Wisent's Antwort ist eine. Hier ist eine andere, vielleicht noch intuitiver, auch wenn es mehrere Prozesse laicht:

for fname in $(find . | grep filexxx) ; do echo "attribute=0000" >> $fname ; done 
6

Oder verwenden Sie eine einfache Schleife:

for f in *txt; do echo "yada" >> "${f}"; done 
+0

Das funktioniert nicht für Dateien in Unterverzeichnissen. Außerdem müssen Sie das "$ {f}" nicht doppelt angeben. – bos

+0

Ich wusste nicht, dass das eine Anforderung war, OP sagte nur "eine Liste von Dateien", nichts über die Tiefe dort. Ich zitiere normalerweise beim Interpolieren von Variablen in Bash wegen der Raum-Nebenwirkungen. Das 'while read'-Beispiel in einem anderen Kommentar wäre eigentlich besser geeignet, um Leerzeichen in Dateien korrekt zu behandeln. – objectified

+0

Ich weiß nicht, ob es eine Anforderung ist oder nicht, ich habe nur geklärt :-) Falls OP erwartet, dass es in Subdirs geht. – bos

Verwandte Themen