Running gentoo for work (which is quite unusual). I'm working on C sources, therefore it is very useful to have a tags file. I'm using the stock ctags, that turns out to be etags. I'm not used to etags, and I was a bit surprised by the fact it is taking a list of files as arguments, but whatever, I can do this: . find ... -exec ctags {} + Easy. Then it turns out that by doing so I'm getting way too much information, as all the arch- and board-specific information should be filtered out. The script became something like this: . find ... | . while read -r f; do . case "$f" in . ./board/$brand/$boardname/*) ;; . ./board/*) continue ;; # skip . *) ;; . esac . ctags -a "$f" . done This seems to make sense, but for some reason the resulting tags file is incomplete. Using tail -F on it, I found that it gets truncated despite the -a flag, and there's no obvious explanation in the manpage. While I suspect that there must be a reason for it, perhaps buried in the very unreadable info pages that typically come with GNU software, I think it would be easier with exuberant-ctagss. . find board \ . -maxdepth 2 \ . -type d ! \ . -wholename $brand/$board | . xargs printf --exclude=%s\ . xargs ctags -R Heh, of course I'm sure no files contain stupid spaces etc. I'm skipping -print0 and friends on purpose. On the installation of exuberant-ctags on gentoo: I fond it extremely gentle: after the installation via emerge (emerge -vta dev-util/ctags) a message informs me that I should select which of the two alternatives should be used as `ctags`. This is similar to how Debian works. A nice operating system so far!