递归编号目录

ali*_*250 2 command-line directory find rename directory-structure

我有以下目录结构:

$ directory tree Data
Data
??? Mercury
??? Venus
??? Earth
?   ??? Australia
?   ??? Asia
?     ??? Japan
|       ??? Hokkido   
??? Mars
    ??? HellasBasin
    ??? SyrtisCrater
Run Code Online (Sandbox Code Playgroud)

如何递归地重命名/编号/标记所有目录以获得类似于以下的结果?

Data
    ??? 01
    ??? 02
    ??? 03
    ?   ??? 031
    ?   ??? 032
    ?     ??? 0321
    |       ??? 03211   
    ??? 04
        ??? 041
        ??? 042
Run Code Online (Sandbox Code Playgroud)

这个想法是用新名称(数字、字母或它们的组合)重命名整棵树。他们没有必要有像 03211 这样的标签。

在此先感谢您的时间。

mur*_*uru 6

使用 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 ""
Run Code Online (Sandbox Code Playgroud)

最初:

$ 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
Run Code Online (Sandbox Code Playgroud)

然后:

$ ./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
Run Code Online (Sandbox Code Playgroud)