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 这样的标签。
在此先感谢您的时间。
使用 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)