모든 폴더 및 파일 이름의 문자열을 바꾸는 방법

모든 폴더 및 파일 이름의 문자열을 바꾸는 방법

모든 폴더 및 파일 이름의 문자열을 다른 문자열로 재귀적으로 바꾸는 방법은 무엇입니까? 저는 Red Hat 6을 실행 중이며 다음을 통해 찾을 수 있습니다.

find . -name \*string\*

파일의 문자열을 사용하여 이 작업을 수행했습니다.

find . -type f -exec sed -i 's/string1/string2/g' {} +

하지만 비슷한 방식으로 모든 파일 이름을 어떻게 바꿀 수 있습니까?

답변1

사용 findrename:

find . -type f -exec rename 's/string1/string2/g' {} +

이 명령의 의미 중 하나는 현재 디렉터리( ) 에서 모든 파일( )을 find . -type f검색한다는 것입니다 .-type f.

  • -exec옵션은 find찾은 각 파일에 대해 명령이 실행되도록 지시합니다.

  • rename명령은 파일 이름을 바꾸는 데 사용됩니다. 여기에 사용된 구문은 Perl 버전의 rename.

  • 's/string1/string2/g'검색할 내용과 바꿀 내용을 지정하는 정규식 입니다 . 이 경우 string1교체할 문자열은 string2교체 문자열입니다. 후행 항목은 파일 이름의 모든 항목을 /g대체합니다 .string1

  • {}기호는 발견된 파일 이름에 대한 자리 표시자입니다 find.

  • +마지막 명령은 find여러 파일 이름을 rename 명령에 한 번에 전달하도록 지시합니다. 이는 각 개별 파일에 대해 rename을 호출하는 것보다 더 효율적입니다.

따라서 요약하면 이 명령은 현재 디렉터리의 모든 파일을 검색하고 rename발견된 각 파일의 파일 이름을 모두 바꾸는 명령을 실행합니다 string1.string2

답변2

formv명령을 사용하여 모든 파일 이름을 바꿀 수 있습니다.

abc여기서는 이름으로 시작하는 모든 텍스트 파일을 다음으로 바꿉니다.xyz

for file in abc*.txt; do mv -v "$file" "${file/abc/xyz}"; done

다음 명령은 모든 폴더의 파일을 재귀적으로 교체합니다.

for file in `find . -type f -name 'abc*.txt'`; do mv -v "$file" "${file/abc/xyz}"; done

답변3

zsh사용하기가 더 쉽습니다 zmv.

autoload zmv # best in ~/.zshrc
zmv '(**/)(*string1*)' '$1${2//string1/string2}'

로 변경

zmv '(**/)(*string1*)(#qD)' '$1${2//string1/string2}'

숨겨진 파일이나 숨겨진 디렉터리의 파일 이름도 바꾸려는 경우.

관련 정보