renomear um diretório e seus subdiretórios sem afetar seus arquivos

1

Eu tenho que renomear os diretórios sob o diretório raiz com prefixo "ms_PF" e então renomear seus subdiretórios com o nome modificado do diretório principal com um extra "_", e então copiar todos os diretórios e seus subs para raiz da seguinte forma:

root
   maindir1
   maindir2
           subdir1
           subdir2
           subdir3

maindir1 e maindir2 devem ser renomeados com prefixo "ms_PF_" e copiados diretamente para root, porque maindir2 tem subdiretórios eles carregam o novo nome de maindir2, que é ms_PF_maindir2 plus e underscor (_), então todos os subs serão copiados para root como segue:

ms_PF_maindir1
ms_PF_maindir2_subdir1
ms_PF_maindir2_subdir2
ms_PF_maindir2_subdir3

A assistência nesta questão é muito apreciada. Minha tentativa de solução é algo assim, mas na verdade precisa ser corrigida:

root_dir="/dwn/icbu_dwn/LL"
prefix="ms_PF_"
do_it () {
awk '{ print "mv $root_dir $prefix ${root_dir/\//_}" }' | sh
}
find "$root_dir" -depth -type d | do_it
    
por terry 07.03.2013 / 20:55

2 respostas

1

Se forem apenas alguns diretórios, faça isso manualmente (qualquer outra coisa será mais trabalho na escrita / depuração do que em fazer).

Se for um conjunto grande, use find(1) para criar uma lista dos arquivos afetados e use seu editor favorito para transformar isso em um script que esteja sendo movido. Verifique se há erros e atire.

Se ainda maior / repetitivo, eu faria essencialmente o mesmo que o acima, mas faça o "editar o caminho para o novo nome" por sed(1) on-the-fly. Talvez até mesmo chamado diretamente de find . Faria um bom one-liner para assustar os novatos sem pensar ...

    
por 07.03.2013 / 21:22
1

Isso fará a renomeação na ordem correta. Observe que a barra no final do primeiro padrão limita as correspondências aos diretórios.

cd root
for dir in maindir*/*/ maindir*; do
    echo mv $dir ms_PF_${dir/\//_}
done

saídas

mv maindir2/subdir1/ ms_PF_maindir2_subdir1/
mv maindir2/subdir2/ ms_PF_maindir2_subdir2/
mv maindir2/subdir3/ ms_PF_maindir2_subdir3/
mv maindir1 ms_PF_maindir1
mv maindir2 ms_PF_maindir2
    
por 07.03.2013 / 21:58