我有以下最小的源文件:
$ cat path/xx/yy/fooBar.c
void this_is_a_test(void)
{
}
如果我像这样运行 etags 它可以正常工作:
$ etags path/xx/yy/fooBar.c
$ cat TAGS
path/xx/yy/fooBar.c,25
void this_is_a_test(1,0
但是,如果我通过 find/xargs 运行 etags,则 TAGS 文件已损坏:
$ find . -name fooBar.c
./path/xx/yy/fooBar.c
$ find . -name fooBar.c | xargs etags
$ cat TAGS
path/xx/yy/fBoBar.c,25
void this_is_a_test(^?1,0
请注意,文件名在上面显示为 fBoBar.c——假的!
我希望能够通过执行类似find . -name '*.[ch]' | xargs etags
. 但是当我这样做时,它会破坏大多数文件名。
知道为什么它会这样失败,和/或我能做些什么来让它工作吗?
Ubuntu 清醒。Etags 来自 emacs23-bin-common 23.1+1-4ubuntu7。
编辑:
回答 fschmitt 的问题:
$ etags $(find . -name fooBar.c)
$ cat TAGS
path/xx/yy/fBoBar.c,25
void this_is_a_test(1,0
新信息:
我刚刚注意到,在我上面的原始问题中,这两种用途之间的区别是.
路径上的领先。如果我将 etags 称为etags ./path/xx/yy/fooBar.c
,它会损坏文件。因此,一种解决方法是确保 etags 的 args 没有前导标签。(也许这是 etags 中的一个错误,因为文档几乎完全准确地描述了我的使用模式。)