Renomeando arquivos e diretórios recursivamente usando renomear / localizar

2

Comecei a aprender linux no vmware usando o centos 7. Eu criei um diretório de imagens e várias camadas de arquivos e subdiretórios naquela pasta. a maioria dos nomes contendo espaços. Eu quero usar um único comando para renomear todos os arquivos e diretórios de uma só vez.

comando que estou usando agora é

find . -type f -exec rename "find" "replace" {} \;
&
find . -type d -exec rename "find" "replace" {} \;
Onde como encontrar é um espaço e substitua é "-" (hiphen). Eu até tentei abaixo do comando olhando para uma das respostas na troca de pilha.
find . -iname "find" -exec rename "find" "replace" {} \;
    
por Syed Mudabbir 25.02.2016 / 17:52

2 respostas

2

Como você vai renomear os diretórios sob find , diga-o para agir sobre o conteúdo de um diretório antes do próprio diretório, com -depth . Por outro lado, fazer diretórios separadamente dos arquivos regulares não ajuda.

Para renomear um arquivo com as ferramentas disponíveis em uma instalação padrão do CentOS, você pode usar um shell e mv . Tome cuidado para alterar apenas o nome base, não o nome do diretório (já que o novo diretório ainda não existe).

find . -depth -exec bash -c '
  for filename do
    basename=${filename##*/}
    mv "$filename" "${filename%/*}/${basename// /-}"
  done
' _ {} +
    
por 25.02.2016 / 23:45
1

Usual zsh responder a esse tipo de pergunta:

autoload zmv # best in ~/.zshrc
zmv -v '(**/)(* *)' '$1${2// /-}'

Ele cuida do processamento dos arquivos primeiro em profundidade e verifica conflitos ou substituições (somente arquivos regulares) melhor do que você normalmente faria manualmente.

    
por 25.02.2016 / 23:56