Рекурсивно номерные справочники
У меня есть следующая структура каталогов:
$ 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