Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The ctags command doesn't recurse saying "it is not a regular file"

When I run ctags -R *, I get errors saying that all directories are not regular files and it skips them instead of recursively generating tags for them.

ctags: skipping arpa: it is not a regular file. ctags: skipping asm: it is not a regular file. ctags: skipping asm-generic: it is not a regular file. ctags: skipping bits: it is not a regular file. ctags: skipping blkid: it is not a regular file. ctags: skipping boost: it is not a regular file. 

What is the problem?

like image 334
indiv Avatar asked Jun 03 '10 17:06

indiv


People also ask

What are ctags files?

ctags creates a file named tags in the current directory. It summarizes the locations of various objects in the C source files named on the command line. All files with a . c or . h suffix are treated as C source files.

How do ctags work?

Ctags is a tool that will sift through your code, indexing methods, classes, variables, and other identifiers, storing the index in a tags file. The tags file contains a single tag per line. Depending on command line arguments and the language ctags is run against, a lot of information can be obtained from this index.


1 Answers

Similar to this and this, the problem is you're not running Exuberant Ctags, you're running GNU Emacs etags, which also provides a ctags executable. Run ctags --version and you'll see something like this:

ctags (GNU Emacs 23.1) Copyright (C) 2009 Free Software Foundation, Inc. This program is distributed under the terms in ETAGS.README 

And if you look in the man page, you'll see that -R is actually equivalent to --no-regex. In fact, the man page doesn't even mention recursion as an option.

   -R, --no-regex           Don't  do  any more regexp matching on the following files.  May           be freely intermixed with filenames and the --regex option. 

You could probably generate the tags recursively using shell magic, but you may run into problems down the road if you're expecting Exuberant Ctags. So the best solution is probably to install the ctags you want instead:

sudo apt-get install exuberant-ctags 

Exuberant Ctags can also be installed from source:

http://ctags.sourceforge.net/ 
like image 120
indiv Avatar answered Sep 27 '22 19:09

indiv