Sua solução funciona (copiada e colada no meu shell), exceto que ela também toca em dotfiles em subdiretórios. Para evitar tocar neles, você precisa invocar find
as
find -type f \! -name '.*' | xargs sed -i '1 i\/* ... */'
( -and
é assumido entre -type f
e \! -name '.*'
). Note que eu preciso escapar !
no meu shell (Bash).
Observe que a opção insert
de sed
não funciona se os arquivos estiverem em branco. Se você escrever algum texto nos arquivos da pasta atual, ele funciona.
Além dos arquivos de configuração, você deve evitar gravar em imagens. Meu palpite é que seria melhor especificar os formatos a serem gravados. Algo parecido com isto:
find ./* -regex ".*\.\(php\|js\|txt\|html\|css\|yml\|twig\)" -type f | xargs sed -i '1 i\/* CCCopyright 2013 Manolo Salsas [B\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA*/ '
Atualização:
Outra solução para filtrar arquivos com base em tipos de arquivos é usar o recurso de seleção de tipo de arquivo ack . Supondo, por exemplo, que você queira selecionar apenas arquivos C e Perl:
ack -f --type=cc --type=perl | xargs sed -i '1 i\/* ... */'
( type=cc
significa C)