You can do a few things.

`head` and `tail` are both spec'd to display the first/ten lines of a file by default - but if called w/ multiple arguments will do that for all and display the filenames between each. And, of course, for each, you can use the `-n[num]` argument to tailor how many lines are displayed. I assume your CTRL-C problem was related to the `-f` option - which would instruct `tail` to follow a file - you probably should just leave that out.

Another thing you might do - which will result in output a little different than in the question, but which you might still like, is...

 grep -F '' *files

`grep` is also spec'd to display the filename for its matches when it is given multiple filename arguments - but `grep` does it at the head of every line. Like

 seq 10 >nums.txt; grep -F '' /dev/null nums.txt

...which prints...

 nums.txt:1
 nums.txt:2
 nums.txt:3
 nums.txt:4
 nums.txt:5
 nums.txt:6
 nums.txt:7
 nums.txt:8
 nums.txt:9
 nums.txt:10

...and highlighted on my terminal. The `/dev/null` thing is just a little trick to force the multiple file arg behavior even when working with only a single file, and `grep -F ''` matches every line - even blank ones.

And here's `head /dev/null nums.txt`:

 ==> /dev/null <==
 
 ==> nums.txt <==
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10

`tail`'s output is identical in this case - but, again, both utilities only print so many lines of a file.