Você obtém renomear os nomes dos diretórios porque o comando find
retorna o caminho completo dos nomes dos arquivos e o comando renomear fez a renomeação também base no nome do diretório. Portanto, se você tiver um arquivo no diretório DIR1/FILE
, ele será renomeado para dir1/file
enquanto você não quiser renomear o diretório.
Aqui está o comando para renomear apenas o nome dos arquivos:
find . -type f -exec rename -n 's:([^/]*$):lc($1):e' {} +
No comando acima, ([^/]*$)
corresponde apenas à última parte do caminho que não contém /
dentro de um par de parênteses (...)
, o que torna a parte correspondida como um grupo de correspondências. Em seguida, traduza a parte correspondente ( $1
é o índice do primeiro grupo correspondente) para minúsculas com a função lc()
.
No momento, você precisa montar a opção -n
para renomear os arquivos reais.
-exec ... {} +
is for commands that can take more than one file at a time (egcat
,stat
,ls
). The files found byfind
are chained together like anxargs
command. This means less forking out and for small operations, can mean a substantial speedup. [answer by @Oli]