다음과 같은 파일이 있습니다.
1_suffix.txt
2_suffix.txt
3_suffix.txt
삭제하고 싶습니다 _suffix.txt
. 라는 명령을 찾아서 rename
다음과 같이 사용했습니다.
먼저 다음을 시도합니다.
rename -v 's/*_suffix.txt$/\.txt/' *.png
작동하지 않았지만 다음을 시도했습니다.
rename -v 's/_suffix.txt$/\.txt/' *.png
효율적인.
두 번째 정규식이 잘못된 것 같은데 왜 작동하나요?
나는 ls를 사용해 본다:
ls _suffix.txt # not worked
ls *_suffix.txt # worked
답변1
이 rename
명령은 전역 패턴이 아닌 정규식을 사용합니다. 유효한 전역 패턴 이지만 *foo
유효한 정규 표현식은 아닙니다. *
"0 이상"을 의미 하지만 0 이상도 지정해야 합니다.무엇. "모든 문자"의 경우 다음을 사용하십시오 .
.
s/.*_suffix\.txt$/.txt/
이제 다음 문제는 이것이 s/_suffix.txt$/\.txt/' *.png
결코 작동하지 않는다는 것입니다. rename
이름이 .로 끝나는 모든 파일의 이름을 바꾸라고 지시 _suffix.txt
하지만 이름이 .로 끝나는 파일에 대해서는 이 작업을 수행하도록 지시합니다 png
. 이것이 *png
(정규 표현식이 아닌 glob)의 의미입니다.
내 생각에 당신이 정말로 원하는 것은 다음과 같습니다.
rename 's/_suffix//' *suffix.txt
이는 아무것도 대체하지 않고 _suffix
삭제하기만 하면 원하는 파일 이름이 지정됩니다.
답변2
경로명 글로브 패턴유닉스 쉘은 다른 것을 사용합니다일반적인 표현메타문자의 구문과 의미.