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

관련 정보