3

I've to add the content of a file to the end of every prefs.js file. Tried it with find -name 'prefs.js' -exec more filecontent >> '{}' \; but it didn't work.

0

5 Answers 5

4

Redirection does not happen for each file (this is tricky). The workaround is to spawn a new shell for each file:

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

The - is necessary, as it becomes the zeroth ($0) argument to sh

Besides, you have to use cat instead of more. More is a pager which allows users to scroll through a document.

1

Use xargs:

find -name 'prefs.js' | xargs -n1 bash -c 'cat content_to_be_added >> $1;' -
0
1
for f in `find -name 'prefs.js'`
do
    echo $f
    #cat $f >> outfile
    cat infile >> "$f"
done
2
  • nope, filecontent should be added to each prefs.js file Apr 5, 2012 at 10:03
  • @Fredrik Fixed that.
    – Eroen
    Apr 18, 2012 at 17:32
0

It works to write a small shell script cbd.sh

#!/bin/bash

echo "filecontent" >> "$1"

of course yo can replace echo with

cat "somefile"

and to call

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

in the same directory.

The syntax of the find command with its -exec is a true monster.

1
  • 1
    "The syntax of the find command with its -exec is a true monster." Agree!
    – purplebrown
    Apr 5, 2012 at 10:24
0

How about

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

That is assuming filecontent is a file containing what you want to append to the prefs.js files.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.