GIT はファイルをフォルダからサブフォルダに移動します。

GIT はファイルをフォルダからサブフォルダに移動します。

次のフォルダ構造があります。

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

GIT履歴を維持しながら、Appフォルダのルート上のファイルだけをそのbinフォルダに移動したいと思います。したがって、最終結果は次のようになります。

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

関連情報