У меня есть следующий минимальный исходный файл:
$ 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, потому что документация почти точно описывает мою схему использования.)