add filename to beginning of file using find and sed
untested, try using xargs
find . -type f | xargs -I FILE sed "s/^/FILE/g" FILE > out
find . -type f |xargs awk '$0=FILENAME$0' > out
as I answered this, your "no awk" line not yet there. anyway, take a look my updated answer below:
updated based on comment
so you want to use find, exec/xargs, and sed to do it. My script needs GNU Sed, i hope you have it.
see the one liner first: (well, > out
is omitted. You could add it to the end of the line. )
find . -type f | xargs -i echo {}|sed -r 's#(.\/)(.*)#cat &\|sed "s:^:file \2 :g"#ge'
now let's take a test, see below:
kent$ head *.txt
==> a.txt <==
A1
A2
==> b.txt <==
B1
B2
kent$ find . -type f | xargs -i echo {}|sed -r 's#(.\/)(.*)#cat &\|sed "s:^:file \2 :g"#ge'
file b.txt B1
file b.txt B2
file a.txt A1
file a.txt A2
is the result your expectation?
Short explanation
find ....|xargs -i echo {}
nothing to explain, just print the filename per line (with leading"./"
)- then pass the filename to a sed line like
sed -r 's#(.\/)(.*)# MAGIC #ge'
- remember that in the above line, we have two groups
\1: "./"
and\2 "a.txt"(filename)
- since we have
e
at the end of sed line, the MAGIC part would be executed as shell command.(GNU sed needed) - MAGIC:
cat &\|sed "s:^:file \2 :g
cat & is just output the file content, and pipe to another sed. do the replace (s:..:..:g
) - finally, the execution result of MAGIC would be the Replacement of the outer sed.
the key is the 'e' of Gnu sed.