find . -maxdepth 1 -type f -name '*.ovpn' \
-exec sed -i 's/auth-user-pass/auth-user-pass pass.txt/g' {} +
Isso executaria seu sedcomando no maior lote possível de nomes de arquivos (somente arquivos regulares, sem nomes de diretório correspondentes, etc.), com os nomes de arquivos correspondendo ao padrão fornecido do diretório atual (somente). Ele também lidaria com nomes de arquivos potencialmente estranhos (espaços, novas linhas etc.)
A -maxdepthopção/predicado não é padrão, mas frequentemente implementado.
Sim, ir com
xargs
é o caminho certo a seguir.O caso simples é
mas só funciona para arquivos cujos nomes não contenham espaços em branco. O caminho seguro é
Se você não quiser executar todo o pipeline como
root
, especifiquesudo
antesxargs
ou antes desed
.Uma não-
xargs
variante usandofind
:Isso executaria seu
sed
comando no maior lote possível de nomes de arquivos (somente arquivos regulares, sem nomes de diretório correspondentes, etc.), com os nomes de arquivos correspondendo ao padrão fornecido do diretório atual (somente). Ele também lidaria com nomes de arquivos potencialmente estranhos (espaços, novas linhas etc.)A
-maxdepth
opção/predicado não é padrão, mas frequentemente implementado.