Рекурсивно номерные справочники

У меня есть следующая структура каталогов:

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

Как можно рекурсивно переименовать / пронумеровать / пометить все каталоги, чтобы получить результат, подобный следующему?

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

Идея состоит в том, чтобы переименовать все дерево с новыми именами (цифры, буквы или их комбинации). Они не обязательно должны иметь ярлыки, такие как 03211.

Спасибо заранее за ваше время.

1 ответ

Решение

Используя bash:

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

Первоначально:

$ 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

Затем:

$ ./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
Другие вопросы по тегам