Copia e renomeia recursivamente para substituir espaços com sublinhado

0

Eu tenho um diretório com 400 subdiretórios, cada um contendo centenas de arquivos, muitos com nomes de arquivos que contêm espaços. Eu preciso copiar todos os arquivos com espaços nos nomes de arquivos, resultando duas cópias desses arquivos, um com espaços e outro com sublinhados substituindo os espaços. Eu vejo muito código que chega perto, mas nada que copie, renomeie e substitua espaços recursivamente. Alguma sugestão ??? Obrigado .... RW O Linux renomeia usando parâmetros e espaços? O Linux renomeia usando parâmetros e espaços?

    
por user2693196 21.11.2013 / 04:32

1 resposta

1

E, no entanto, não é muito difícil:

 for i in "$(find . -type f -name '* *' -print)"; do cp "$i" $(echo $i | sed 's/ /_/g'); done

Isso pressupõe que os nomes dos seus diretórios não contêm . Se eles fizerem isso, o seguinte script funcionará:

  #!/bin/bash

 TGT=/path/to/targt/directory
 LIST="$(find $TGT -type f -name '* *' -print)"
 for i in $LIST; do 
      dirpath=${i%/*}
      base=base=${i##*/}
      newbase=$(echo "base" | sed 's/ /_/g')
      cp "$i" $dirpath/$newbase
 done

Se os nomes dos seus diretórios contiverem espaços, e você quiser aqueles dulicados, você terá que especificar melhor o que deseja duplicar: os arquivos originais e os novos, somente os novos, possíveis outros arquivos sem espaços ...

    
por 21.11.2013 / 07:02