如何解决在 Windows 上使用 bash 递归重命名文件目录
├── package-1
│ └── src
│ ├── controllers
│ ├── models
│ |── traits
│ └── views
├── package-2
│ └── src
│ ├── controllers
│ ├── models
│ |── traits
│ └── views
├── package-3
│ └── src
│ ├── controllers
│ ├── models
│ |── traits
│ └── views
我想递归地将文件夹 controllers
重命名为 Controllers
、models 和 Models
从各种文章例如 https://askubuntu.com/questions/56326/how-do-i-rename-a-directory-via-the-command-line 和帖子我可以看到我需要使用 rm
所以我运行下面的命令
for i in */src/controllers/;
do mv $i /Controllers/;
done
以下是我面临的错误
mv: cannot move 'laravel-files/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-guardian-admissions/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-guardians/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-lms/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-permissions-and-roles/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-procurements/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-school-accounts/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-school-curriculum/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-school-exams/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-school-infrastructures/src/controllers/' to '/Controllers/controllers': Directory not empty
mv: cannot move 'laravel-school-streams/src/controllers/' to '/Controllers/controllers': Directory not empty
请帮助指出我在实施中出错的地方
解决方法
由于 /
中的前导 mv $i /Controllers/
,您将每个 $i
移动到同一个目录,即位于文件系统最顶部的名为 Controllers
的目录。
要么cd
进入每个目录并使用相对路径(cd "$i/.."; mv "$i" Controllers; cd -
)或使用bash的参数扩展修改路径:
for i in */src/controllers/; do
mv "$i" "${i/\/c/\/C}"
done
${i/\/c/\/C}
将第一个 /c
替换为 /C
。
如果您安装了 GNU parallel
,您可以尝试:
find . -regextype posix-extended -regex '.*/(controlers|models|traits|views)' |
parallel echo mv {} {= 's[(.*/)(.+)][${1} . ucfirst($2)]e' =}
如果结果是预期的,则删除 echo
。