繁体   English   中英

在 windows 上使用 bash 递归地重命名文件目录

[英]Rename file directories recursively using bash on windows

├── 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM