일치하는 항목이 있으면 디렉터리 트리에 있는 모든 파일의 부분 이름을 바꿉니다.

일치하는 항목이 있으면 디렉터리 트리에 있는 모든 파일의 부분 이름을 바꿉니다.

나는 이와 같은 디렉토리 트리를 가지고 있습니다

.
|-- players
|   |-- red_alice.plr
|   |-- red_bob.plr
|-- resources
|   |-- red_cash.rsc
|   |-- red_food.rsc

모든 디렉토리를 반복하고 "red"로 시작하는 파일의 이름을 "blue"로 시작하도록 바꾸고 싶습니다...

나는 이것이 find 및 sed 명령의 작업이라고 생각하지만 상황을 어떻게 표현해야 할지 잘 모르겠습니다... 예를 들어 다음과 같은 방법으로 파일을 찾을 수 있다는 것을 알고 있습니다.

find . -name "red*" -type f

그렇다면 이 출력을 사용하여 빨간색의 이름을 파란색으로 바꾸려면 어떻게 해야 합니까?

답변1

rename 명령을 사용하여 이 작업을 수행할 수 있습니다.

find . -type f -name "red*" -exec rename  s/red/blue/g "{}" +;

따라서 이름으로 시작하는 파일을 찾은 red다음 모든 파일을 다음과 같은 단일 명령에 넣습니다.

 rename s/red/blue/g red_first red_second

현재 디렉토리 아래의 모든 디렉토리에 있는 파일을 검색합니다.

답변2

어쩌면 다음과 같은 것일 수도 있습니다.

find . -name "red_*" -exec bash -c 'echo mv "{}" "$(echo "{}" | sed "s%/red_%/blue_%" )"' \;

이것은 단지 인쇄 명령일 뿐입니다. 실제로 작동하는지 확인해 보니 좋네요. 이를 확인했다면 echo이전 항목을 삭제하세요 mv.

관련 정보