Com a ferramenta Perl rename (que é chamada rename no Debian e amigos incluindo o Ubuntu, pode ser prename em outro lugar):
rename -n 's/(?<!\.)jpg$/.jpg/' * # -n makes it show you what it'll do,
# but not actually do it. Remove the -n to
# actually rename
Para quebrar esse padrão: o jpg$ significa "termina com 'jpg'". O (?<!\.) significa 'não há um ponto antes desse' jpg '". Isso impede que você altere foo.jpg para foo..jpg , o que seria bobo.
O * é o curinga normal da shell; rename pega uma lista de arquivos para considerar renomear. É claro que você pode fazer /path/to/dir/* , passar uma lista de nomes de arquivos, usar em conjunto com find , etc.
Remover pontos e espaços desde o início também é bastante fácil:
rename -n 's/^[. ]+//' * # trying -n first is good practice
Isso removerá todos os pontos e espaços no começo. Isso transformará . . . foo em foo .
Normalmente, a expansão% shell * não renderá arquivos que tenham um nome começando com um ponto (arquivos ocultos). Uma opção é usar .* ; Isso também renderá as duas entradas especiais . (diretório atual) e .. (diretório pai). Isso deve ser inofensivo neste caso; o primeiro comando irá ignorá-los (eles não terminam em jpg ); o segundo comando tentará renomeá-los, mas isso deve apenas produzir um erro. Uma alternativa é encontrar:
find -type f -exec rename -n 's/^[. ]+//' '{}' +
-type f limitará a apenas arquivos. Você também pode usar qualquer outra opção do find.