Я хочу добавить файл лицензии в начало каждого файла .java в каталоге * nix и всех его подкаталогов. У меня есть это решение, которое, кажется, работает нормально:
$ cat muppet-license.txt
// LICENSE: // Manuh-manuh
$ for file in `find . -iname "*.java"`; do
cat muppet-license.txt "$file" > "$file.out";
mv "$file.out" "$file";
done
Мой вопрос: почему следующий вызов find НЕ работает:
find . -iname "*.java" -exec sh -c 'cat muppet-license.txt "$1" > "$1"' -- {} \;
Это приводит к тому, что в самом первом найденном файле find "лицензия маппета" неоднократно добавляется в начало - файл, кажется, непрерывно увеличивается без остановки.
Может кто-нибудь объяснить, в чем здесь разница? Это как-то связано с изменением файла с именем $ 1, заставляющим find повторно находить его как часть рекурсивного поиска? У кого-нибудь есть хорошие ссылки на детали алгоритма, который находит использование?