递归编号目录

递归编号目录

我有以下目录结构:

$ 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

相关内容