Renomeia vários diretórios

6

Eu quero encontrar todos os diretórios com o último subdiretório chamado doc , para depois renomeá-los para Doc . Como pode ser renomeado?

Eu tenho a primeira parte:

find -type d -name 'doc' 

que retorna caminhos de diretórios como:

./foo/bar/doc
    
por Marc 25.07.2012 / 10:26

3 respostas

7
find . -depth -type d -name doc -exec sh -c 'mv "${0}" "${0%/doc}/Doc"' {} \;
    
por 25.07.2012 / 13:25
2

No zsh, você pode usar a zmv function para gerar massa arquivos -rename:

zmv '(**/)doc' '${1}Doc'

Se você possui não diretórios chamados doc , certifique-se de não combiná-los, adicionando um Qualificador glob :

zmv -Q '(**/)doc(/)' '${1}Doc'
    
por 26.07.2012 / 02:29
1

Se sua intenção é capitalizar o diretório e você estiver usando bash 4+, isso deve ser feito:

find . -type d -name doc -print0 \
| while read -rd $'
find . -type d -name doc -print0 \
| while read -rd $'%pre%' file; do
    dname=$(dirname "$file")
    fname=$(basename "$file")
    mv "$file" "$dname"/"${fname^}"
  done
' file; do dname=$(dirname "$file") fname=$(basename "$file") mv "$file" "$dname"/"${fname^}" done

Observe o uso de ${var^} para garantir o manuseio correto de nomes de arquivos incomuns.

Atualizar

Como jw013 aponta nos comentários ^ não funciona como eu esperava. Eu alterei a resposta para separar o caminho no diretório e nome do arquivo e aplico o operador $fname somente a %code% .

Btw, obrigado pressa por adicionar o pipe perdido.

    
por 25.07.2012 / 12:09