Como renomear todos os arquivos em um diretório, recursivamente, alterando uma extensão para outra, para milhares de arquivos em milhares de subpastas? Eu vejo muitos comandos que fazem quase o que eu quero, mas não exatamente.
find . -name "*.andnav" -exec rename .andnav .tile {} \;
syntax error at (eval 1) line 1, near "."
...
rename -nv 's/\.andnav$/\.tile/i' *.andnav
0.png.andnav renamed as 0.png.tile
linux
command-line
file-management
rename
endólito
fonte
fonte
rename
ou Red Hatrename
?Respostas:
Descobri isso
é claro, remova o -v quando estiver fazendo isso ou perderá tempo exibindo todos os arquivos
fonte
Algo como:
fonte
Com zsh:
Remova o
-n
para realmente executar a renomeação.fonte
Eu achei esse método mais fácil e mais fácil de ler:
Pelo menos nas derivações do Ubuntu, renomear leva uma lista de arquivos do STDIN se nenhum estiver na linha de comando. E isso pode ser testado facilmente com:
até você acertar.
fonte
Renomeie arquivos e diretórios com
find -execdir | rename
Se você vai renomear arquivos e diretórios, não apenas com um sufixo, esse é um bom padrão:
A
-execdir
opção impressionante faz umcd
no diretório antes de executar orename
comando, ao contrário-exec
.-depth
verifique se a renomeação ocorre primeiro nos filhos e, depois, nos pais, para evitar possíveis problemas com os diretórios-pai ausentes.-execdir
é necessário porque a renomeação não funciona bem com caminhos de entrada sem nome de base, por exemplo, o seguinte falha:A
PATH
invasão é necessária porque-execdir
tem uma desvantagem muito irritante:find
é extremamente opinativa e se recusa a fazer qualquer coisa-execdir
se você tiver algum caminho relativo em suaPATH
variável de ambiente, por exemplo./node_modules/.bin
, falhando com:Consulte também: /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdir
é uma extensão de localização GNU para POSIX .rename
é baseado em Perl e vem dorename
pacote. Testado no Ubuntu 18.10.Mudar o nome da solução alternativa à procura
Se seus caminhos de entrada não vierem
find
, ou se você já teve o suficiente do aborrecimento do caminho relativo, podemos usar alguns Perl lookahead para renomear com segurança diretórios como em:Eu não encontrei um análogo conveniente para
-execdir
comxargs
: xargs: mudança de diretório de trabalho para o caminho do arquivo antes de executar?O
sort -r
é necessário para garantir que os arquivos vir após seus respectivos diretórios, desde caminhos mais longos vir após mais curtos com o mesmo prefixo.fonte