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.
5 Answers
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.
Use xargs:
find -name 'prefs.js' | xargs -n1 bash -c 'cat content_to_be_added >> $1;' -
for f in `find -name 'prefs.js'`
do
echo $f
#cat $f >> outfile
cat infile >> "$f"
done
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"The syntax of the find command with its -exec is a true monster." Agree!– purplebrownApr 5, 2012 at 10:24
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.