rename_all.sh
· 2.1 KiB · Bash
Orginalformat
#!/usr/bin/env bash
#-----------------------------------------------------
# 先收集所有“需要重命名”的目录,再统一重命名
#-----------------------------------------------------
rename_dirs_deepest_first() {
echo "==> Searching for directories containing 'NiBot' ..."
# 收集所有包含“NiBot”的目录,排除 .git
# -path '*/.git*' -prune -o :跳过 .git
# -type d :只搜索目录
# -depth :让 find 先列出子目录,再列出父目录(自下而上)
# -print :把结果打印到 stdout
mapfile -t DIRS < <(find . -path '*/.git*' -prune -o -type d -name "*NiBot*" -depth -print)
# 逐个重命名,越深的目录会在前面列出(因为-depth先处理子目录)
for old_dir in "${DIRS[@]}"; do
# 生成新名字
new_dir=$(echo "$old_dir" | sed 's/NiBot/Voyager/g')
# 如果名称确实不同就执行 mv
if [[ "$old_dir" != "$new_dir" ]]; then
echo "Renaming directory:"
echo " $old_dir"
echo "-> $new_dir"
mv "$old_dir" "$new_dir"
fi
done
}
#-----------------------------------------------------
# 收集所有“需要重命名”的文件,再统一重命名
#-----------------------------------------------------
rename_files_deepest_first() {
echo "==> Searching for files containing 'NiBot' ..."
# 收集所有包含“NiBot”的文件,排除 .git
mapfile -t FILES < <(find . -path '*/.git*' -prune -o -type f -name "*NiBot*" -depth -print)
# 逐个重命名
for old_file in "${FILES[@]}"; do
new_file=$(echo "$old_file" | sed 's/NiBot/Voyager/g')
if [[ "$old_file" != "$new_file" ]]; then
echo "Renaming file:"
echo " $old_file"
echo "-> $new_file"
mv "$old_file" "$new_file"
fi
done
}
#-----------------------------------------------------
# 主流程:先处理目录,再处理文件
#-----------------------------------------------------
rename_dirs_deepest_first
rename_files_deepest_first
echo "All done!"
1 | #!/usr/bin/env bash |
2 | |
3 | #----------------------------------------------------- |
4 | # 先收集所有“需要重命名”的目录,再统一重命名 |
5 | #----------------------------------------------------- |
6 | rename_dirs_deepest_first() { |
7 | echo "==> Searching for directories containing 'NiBot' ..." |
8 | |
9 | # 收集所有包含“NiBot”的目录,排除 .git |
10 | # -path '*/.git*' -prune -o :跳过 .git |
11 | # -type d :只搜索目录 |
12 | # -depth :让 find 先列出子目录,再列出父目录(自下而上) |
13 | # -print :把结果打印到 stdout |
14 | mapfile -t DIRS < <(find . -path '*/.git*' -prune -o -type d -name "*NiBot*" -depth -print) |
15 | |
16 | # 逐个重命名,越深的目录会在前面列出(因为-depth先处理子目录) |
17 | for old_dir in "${DIRS[@]}"; do |
18 | # 生成新名字 |
19 | new_dir=$(echo "$old_dir" | sed 's/NiBot/Voyager/g') |
20 | |
21 | # 如果名称确实不同就执行 mv |
22 | if [[ "$old_dir" != "$new_dir" ]]; then |
23 | echo "Renaming directory:" |
24 | echo " $old_dir" |
25 | echo "-> $new_dir" |
26 | mv "$old_dir" "$new_dir" |
27 | fi |
28 | done |
29 | } |
30 | |
31 | #----------------------------------------------------- |
32 | # 收集所有“需要重命名”的文件,再统一重命名 |
33 | #----------------------------------------------------- |
34 | rename_files_deepest_first() { |
35 | echo "==> Searching for files containing 'NiBot' ..." |
36 | |
37 | # 收集所有包含“NiBot”的文件,排除 .git |
38 | mapfile -t FILES < <(find . -path '*/.git*' -prune -o -type f -name "*NiBot*" -depth -print) |
39 | |
40 | # 逐个重命名 |
41 | for old_file in "${FILES[@]}"; do |
42 | new_file=$(echo "$old_file" | sed 's/NiBot/Voyager/g') |
43 | |
44 | if [[ "$old_file" != "$new_file" ]]; then |
45 | echo "Renaming file:" |
46 | echo " $old_file" |
47 | echo "-> $new_file" |
48 | mv "$old_file" "$new_file" |
49 | fi |
50 | done |
51 | } |
52 | |
53 | #----------------------------------------------------- |
54 | # 主流程:先处理目录,再处理文件 |
55 | #----------------------------------------------------- |
56 | rename_dirs_deepest_first |
57 | rename_files_deepest_first |
58 | |
59 | echo "All done!" |
60 |