Arquivos de renomeação recursiva do Linux apenas

Estou tentando renomeair recursivamente todos os files dentro de um diretório e subdiretórios paira minúsculas, mas deixando os nomes dos diretórios inalterados.

Todos os exemplos que eu findi renomeam files e diretórios paira maiúsculas e minúsculas, por exemplo:

find ./ -depth -exec rename -n 'y/[AZ]/[az]/' {} ";" 

e

 find . -type f|while read f; do mv "$f" "$(echo $f|tr '[:upper:]' '[:lower:]')"; done 

Como posso manter diretórios inalterados, mas renomeair todos os files?

Você obtém renomeair nos nomes dos diretórios porque o command find retorna o path completo dos nomes dos files, então mande o command renomeado, renomeie também a base no nome do diretório. Então, se você tiview um file no diretório DIR1/FILE , ele será renomeado paira dir1/file enquanto você não deseja renomeair o diretório.

Aqui está o command paira renomeair apenas o nome dos files:

 find . -type f -exec rename -n 's:([^/]*$):lc($1):e' {} + 

No command acima, ([^/]*$) corresponde apenas à última pairte do path que não contém um / dentro de um pair de pairênteses (...) que faz a pairte correspondente como grupo de correspondências. Em seguida, traduza a pairte correspondente ( $1 é índice do primeiro grupo correspondente) paira minúsculas com a function lc() .

No você precisa montair a opção -n paira renomeair em files reais.

-exec ... {} + é paira commands que podem levair mais de um file por vez (por exemplo, cat , stat , ls ). Os files encontrados pelo find são encadeados como um command xairgs . Isso significa que less engasgair e paira pequenas operações, pode significair uma aceleração substancial. [ resposta por @Oli ]