일치하도록 파일 이름을 재귀적으로 변경하려면 어떻게 해야 합니까?

일치하도록 파일 이름을 재귀적으로 변경하려면 어떻게 해야 합니까?

다음과 같이 디렉터리에 있는 여러 파일의 이름을 재귀적으로 변경하려고 합니다.

parentdirectory/dir1/foo_1.txt
               /dir2/bar_1.txt
               /dir3/foo_2.txt

제가 사용하고 있는 도구는 와일드카드를 인식하지 못하기 때문에 모든 인스턴스가 정확하게 일치하도록 "1.txt"로 끝나는 모든 파일에서 텍스트를 제거하고 싶습니다.

이러한 파일 목록을 STDOUT으로 생성하고 어딘가에 파이프할 수 있습니다.

find . -name '*1.txt' -print0 |

...하지만 파일 이름을 바꾸기 위해 존재하는 정규식을 작성하는 방법을 잘 모르겠습니다. 또한,이름을 바꿔라내 설정에 따라 설치되지 않았으며 추가할 권한이 없습니다.

답변1

for 루프에서 find 문을 사용하고 쉘 하위 문자열 대체를 사용할 수 있습니다. 이 같은.

for file_name in $(find . -name '*1.txt' -print0); do
    #echo mv -v "$file_name" "${file_name/substring_to_be_replaced/the_replacement_substring}"
    mv -v "$file_name" "${file_name/substring_to_be_replaced/the_replacement_substring}"
done

substring_to_be_replaced그냥 합계 에 값을 넣으세요 the_replacement_substring. 하위 문자열을 바꾸는 방법에 대한 자세한 내용은 여기를 참조하세요.https://stackoverflow.com/questions/13210880/replace-one-substring-for-another-string-in-shell-script.

그리고 먼저 주석 처리된 echo 문을 사용하여 하위 문자열 대체 및 조회가 올바르게 작동하는지 확인하세요. 모든 것이 정상이라고 확신하면 echo 문을 주석 처리하고 실제 mv문을 사용하십시오. 잘못된 매개변수를 사용 하기 시작하면 mv실행 취소가 어렵거나 불가능할 수도 있습니다.

관련 정보