GIT 将文件从文件夹移动到子文件夹

GIT 将文件从文件夹移动到子文件夹

我有以下文件夹结构。

Service
|
-- App1
  |
  --- bin
  |
  --- file1
  |
  --- file2
|
--App2
  |
  --- bin
  |
  --- file1
  |
  --- file2
  |
  --- file3
|
--App3
  |
  --- bin
  |
  --- file1
  |
  --- file2

我希望仅将文件从 App 文件夹的根移动到相应的 bin 文件夹,同时保留 GIT 历史记录。所以最终结果应该是:

Service
|
-- App1
  |
  --- bin
     |
      --- file1
     |
      --- file2
|
--App2
  |
  --- bin
     |
      --- file1
     |
      --- file2
     |
      --- file3
|
--App3
  |
  --- bin
     |
      --- file1
     |
      --- file2

我尝试了以下...

#!/bin/bash

dir1="/c/Service"

subs=`ls $dir1`

for i in $subs; do
  git mv $dir1/$i/* $dir1/$i/bin/
done

...但看到以下错误:

致命:无法将目录移动到其自身中

致命:无效路径“/c”:没有这样的文件或目录

任何帮助表示赞赏。

答案1

从目录的父目录中Service,您可以执行以下操作:

$ for file in Service/*/*; do 
    if [[ -f "$file" ]]; then 
        echo mv "$file" "$(dirname -- "$file")/bin"
    fi
 done
mv Service/App1/file1 Service/App1/bin
mv Service/App1/file2 Service/App1/bin
mv Service/App2/file1 Service/App2/bin
mv Service/App2/file2 Service/App2/bin
mv Service/App2/file3 Service/App2/bin
mv Service/App3/file1 Service/App3/bin
mv Service/App3/file2 Service/App3/bin

如果看起来正确,请删除echo并再次运行它以实际移动文件。

请注意,上述方法将保存git 历史记录,根据要求。如果您不想保留它,而是想将这些命令添加到 git 的历史记录中,只需使用git mv而不是mv

for file in Service/*/*; do 
    if [[ -f "$file" ]]; then 
        echo git mv "$file" "$(dirname -- "$file")/bin"
    fi
 done

相关内容