Número de diretórios recursivamente

2

Eu tenho a seguinte estrutura de diretórios:

$ directory tree Data
Data
├── Mercury
├── Venus
├── Earth
│   ├── Australia
│   └── Asia
│     └── Japan
|       └── Hokkido   
├── Mars
    ├── HellasBasin
    └── SyrtisCrater

Como pode renomear / numero / rotular todos os diretórios recursivamente para obter um resultado semelhante ao seguinte?

Data
    ├── 01
    ├── 02
    ├── 03
    │   ├── 031
    │   └── 032
    │     └── 0321
    |       └── 03211   
    ├── 04
        ├── 041
        └── 042

A idéia é renomear a árvore inteira com novos nomes (números, letras ou combinação deles). Eles não precisam ter rótulos como 03211.

Agradecemos antecipadamente pelo seu tempo.

    
por alien250 17.02.2018 / 14:13

1 resposta

6

Usando o bash:

#! /bin/bash
rename_count ()
{
    count=1
    for i in *
    do
        new="$count"
        mv "$i" "$new"
        # if a directory, recurse into it.
        [[ -d "$new" ]] && (cd "$new"; rename_count "$new")
        ((count++))
    done
}
shopt -s nullglob
cd ""
rename_count ""

Inicialmente:

$ tree foo
foo
├── a
│   ├── d
│   │   └── g
│   ├── e
│   │   └── g
│   └── f
│       └── g
├── b
│   ├── d
│   │   └── g
│   ├── e
│   │   └── g
│   └── f
│       └── g
└── c
    ├── d
    │   └── g
    ├── e
    │   └── g
    └── f
        └── g

12 directories, 9 files

Então:

$ ./foo.sh foo
$ tree foo
foo
├── 1
│   ├── 11
│   │   └── 111
│   ├── 12
│   │   └── 121
│   └── 13
│       └── 131
├── 2
│   ├── 21
│   │   └── 211
│   ├── 22
│   │   └── 221
│   └── 23
│       └── 231
└── 3
    ├── 31
    │   └── 311
    ├── 32
    │   └── 321
    └── 33
        └── 331

12 directories, 9 files
    
por muru 17.02.2018 / 15:15