我有以下目录结构:
$ 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