다음과 같은 폴더 구조가 있습니다.
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