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.