모든 이름 찾기 및 바꾸기

모든 이름 찾기 및 바꾸기

배경

저는 linux/unix를 처음 사용하는데(저는 Mac을 사용하고 있습니다. 어떤 것을 사용하고 있는지 모르겠습니다) 누군가가 이름이 잘못된 폴더와 파일을 많이 만들었기 때문에 들어가서 사용해야 합니다. 정확한 이름. 예를 들어, 그녀는 그것을 오렌지 대신 사과라고 명명했습니다.

내가 무엇을해야 하나

관심 있는 디렉터리로 이동하고 해당 디렉터리에 다음이 필요합니다.

  1. 하위 폴더, 파일 또는 디렉터리 이름에서 "apple"을 "orange"로 바꿉니다.

  2. 모든 파일(텍스트 및 비텍스트)에서 "apple"이라는 단어를 "orange"로 바꿉니다.

내가 시도한 것

나는 다음 명령을 시도했습니다.

grep -lr "사과". | xargs sed -i "s/apple/orange/g"

그건 전혀 작동하지 않습니다

나는 또한 다음을 시도했습니다.

./-exec sed-i's/apple/orange/g'{} 찾기 \;

이는 많은 인스턴스를 대체하지만 전부는 아닙니다. 파일/폴더/디렉터리 이름의 단어를 바꾸지 않습니다.

도와주세요!

답변1

이것은 아마도 가능한 것보다 더 BASHy이지만 아마도 올바른 방향으로 갈 것입니다.

즉, apple이 포함된 모든 폴더를 찾아 다음과 같이 역순으로 정렬합니다.

/tmp/사과/테스트/사과

첫 번째 "사과"가 오작동하더라도 문제가 발생하지 않습니다. 다음으로 출력은 while 루프에 공급됩니다. 여기서 읽기 함수는 일치하는 모든 폴더를 보유하는 변수를 로드합니다. 마지막으로 폴더를 올바른 이름 구조로 이동합니다.

디렉토리의 경우 다음을 시도하십시오.

./ -regex '^.*apple' -type d | sort -r | 잘못된 이름을 읽을 때 실행 mv $badname/%apple/orange};

파일 이름의 경우 (디렉토리 정리 후)

./ - 정규식 '^.'을 찾습니다.사과.' - 유형 f | sort -r | 잘못된 이름을 읽을 때 mv $badname ${badname/apple/orange} 실행

파일 내용에 대한 다른 많은 예가 있습니다.

Awk/Sed: 문자열을 재귀적으로 찾고 바꾸는 방법은 무엇입니까?

관련 정보