비어 있지 않은 수백 개의 디렉토리 이름 바꾸기

비어 있지 않은 수백 개의 디렉토리 이름 바꾸기

운영체제는 Centos 7 입니다

며칠 동안 찾고 있었는데 지금쯤이면 뭔가를 찾아야 할 것 같은 느낌이 들었습니다.

다음과 같은 디렉토리가 수백 또는 수천 개 있습니다.

/tmp/user1/app/webapp/foo/bar.txt
/tmp/user2/app/webapp/etc/bar1.txt
/tmp/user3/app/webapp/whatever/bar2.txt
/tmp/user4/app/webapp/sure/bar3.txt

"webapp"을 "new_webapp"으로 변경해야 합니다.

변경되지 않았지만 이름 /tmp//app/바꿀 디렉터리 아래의 사용자와 콘텐츠는 알 수 없고 다양합니다. 기존의 모든 디렉터리 구조는 비어 있지 않습니다.

각 디렉터리 안팎으로 파일을 수동으로 이동하지 않고도 이 작업을 간결하게 수행할 수 있는 방법을 찾지 못했으며 누군가가 더 효율적인 방법을 알 수 있기를 바랍니다.

답변1

그냥 이름을 바꾸시겠어요?

util-linux를 사용하여 이름을 바꿉니다.

rename -v webapp new_webapp /tmp/user*/app/webapp

찾기(가변 깊이) 사용:

find /tmp -depth -type d -name "webapp" -execdir mv webapp new_webapp \;

mv를 사용한 For 루프:

for path in /tmp/user*/app/
do
    mv -v "$path"/webapp "$path"/new_webapp
done

new_webapp이 이미 존재하는 경우(버그 확인/충돌 해결), webapp이 실제로 마운트 지점이거나 실제 디렉토리 대신 심볼릭 링크이거나 재생성 중인 이 디렉토리 구조를 참조하는 경우와 같은 특별한 경우는 이들 중 어느 것도 다루지 않습니다. 다른 콘텐츠에서는 어떤 일이 발생하도록 설계되었습니다.

따라서 상황에 따라 이는 단순한 이름 바꾸기보다 더 복잡할 수 있습니다.

그러나 이렇게 묻는다면 질문은 명확하지 않습니다.

답변2

이것은 작동합니다:

find /tmp -depth -type d -name webapp -exec sh -c 'mv "${0}" "${0%/webapp}/new_webapp"' {} \;

관련 정보