bash - How to use >> inside find -exec statement? -


from time time have append text @ end of bunch of files. find these files find.

i've tried

find . -type f -name "test" -exec tail -n 2 /source.txt >> {} \; 

this results in writing last 2 lines /source.txt file named {} many times file found matching search criteria.

i guess have escape >> somehow far wasn't successful.

any appreciated.

-exec takes 1 command (with optional arguments) , can't use bash operators in it.

so need wrap in bash -c '...' block, executes between '...' in new bash shell.

find . -type f -name "test" -exec bash -c 'tail -n 2 /source.txt >> "$1"' bash {} \; 

note: after '...' passed regular arguments, except start @ $0 instead of $1. bash after ' used placeholder match how expect arguments , error processing work in regular shell, i.e. $1 first argument , errors start bash or meaningful

if execution time issue, consider doing export variable="$(tail -n 2 /source.txt)" , using "$variable" in -exec. write same thing, unlike using tail in -exec, change if file changes. alternatively, can use -exec ... + , pair tee write many files @ once.


Comments

Popular posts from this blog

python - pip install -U PySide error -

arrays - C++ error: a brace-enclosed initializer is not allowed here before ‘{’ token -

cytoscape.js - How to add nodes to Dagre layout with Cytoscape -