6

我有以下最小的源文件:

$ 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 中的一个错误,因为文档几乎完全准确地描述了我的使用模式。)

4

5 回答 5

6

我在这里面临同样的问题。但是,鉴于您没有提供您使用的 etags/emacs 版本,我不是 100% 我们在谈论同样的问题。

My etags/emacs version 23.1 and I think there is a bug in etags that is corrupting file names when they are prefixed with a "./". For example I picked up one specific file that its name was being corrupted and generated the TAGS file for it with and without the "./" prefix. The corruption only occurred with the "./" prefix.

My - get around the problem - solution is to cut the "./" prefix before feeding the file names to "etags". Here is how I do it:

find . -name '*.[hc]' -print  | cut -c3- | xargs etags -

This works for me hope it does for you!

于 2011-09-16T20:36:27.747 回答
1

我刚刚注意到我上面原始问题中两种用途之间的区别是领先的 . 在路上。如果我将 etags 称为 etags ./path/xx/yy/fooBar.c,它会损坏文件。因此,一种解决方法是确保 etags 的 args 没有前导标签。(也许这是 etags 中的一个错误,因为文档几乎准确地描述了我的使用模式。)

于 2010-10-12T17:59:40.707 回答
0

你需要一个-after etags 让它从标准输入中读取:

find . -name fooBar.c | xargs etags -

编辑:

哎呀,我真的应该阅读整个问题。我不知道为什么它会破坏文件名。但你仍然应该使用-:)

于 2010-10-06T17:35:18.503 回答
0

这很奇怪。如果你这样做会发生什么

etags `find . -name '*.c'` `find . -name '*.h'`

反而?

于 2010-10-06T17:35:53.687 回答
0

这就是我所做的:

etags --members `find ./ | grep [ch]$`

HTH。

于 2011-07-14T05:40:01.493 回答