![如何使用 git 和 bash 以递归方式将名为“n”的文件夹中的所有文件移动到上一个目录](https://linux22.com/image/1509623/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20git%20%E5%92%8C%20bash%20%E4%BB%A5%E9%80%92%E5%BD%92%E6%96%B9%E5%BC%8F%E5%B0%86%E5%90%8D%E4%B8%BA%E2%80%9Cn%E2%80%9D%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E4%B8%8A%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95.png)
我正在重组一个现有项目。它们具有以下奇怪的结构。
src
-main
--app
---item
----src
-----Item.coffee
---other
----src
-----Other.coffee
我想移动 git 中的所有这些文件,因此 Item.coffee 等现在位于...
src
-main
--app
---item
----Item.coffee
---other
----Other.coffee
对于这个来说正确的 Bash/Git 命令是什么?
答案1
您要移动多少个文件?除非您要移动数十/数百/数千个文件,否则只需通过 GUI 或命令手动将文件物理移动mv
到新位置,Git 就会检测到该文件:
- 已从旧位置删除。
- 是新位置中的新文件。
因此,要添加新文件,只需git add *
在文件移动后在项目根目录下执行提交,然后 Git 将处理其余部分,包括注意到原来位于一个位置的文件现在位于另一个位置。
如果你是谈论数十/数百/数千个文件,那么您只需要在 Bash 中编写一些脚本来移动文件,然后执行相同的git add *
操作并提交过程,一切都应该很好。
像这样的 Bash 脚本应该可以将所有以*.coffee
扩展名结尾的项目移动到树中的上一个目录,无论其嵌套深度有多深:
find . -name '*.coffee' |\
while read item_path
do
item_dirname=$(dirname "${item_path}");
mv ${item_path} ${item_dirname}/..;
done
PS:你永远都不应该使用git rm
这样的程序。只需移动文件,使用git add *
添加新移动的文件,然后执行 Git 提交,一切就都好了。