почему etags генерирует поврежденный файл TAGS?

У меня есть следующий минимальный исходный файл:

$ 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

Но если я запускаю etags через find / xargs, файл 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 Lucid. 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 не имеют ведущих тегов. (Возможно, это ошибка в etags, потому что документация почти точно описывает мою схему использования.)

6
задан bstpierre 6 October 2010 в 17:45
поделиться