rename
이 명령을 사용하여 파일 이름을 편집하고 싶습니다 . 좀 더 구체적으로 말하자면, 특정 부분을 분리해서 변경하거나, 어떤 경우에는 전체 이름을 변경하려고 합니다.
예를 들어:
세 개의 디렉터리가 있다고 가정해 보겠습니다... (test-file-1, example2, third)
"test-file-1"을 "file 1"로 변경하려면
나는 내가 사용할 수 있다는 것을 안다 rename 's/test-file-1/file 1/' *
변경할 파일 이름을 명시적으로 지정할 필요가 없도록 와일드카드를 어떻게 설정합니까?
나는 노력했다
rename 's/tes*/file 1/' *
아무 소용이 없다
마찬가지로 와일드카드를 사용하여 전체 파일 이름을 변경할 수 있는지 알고 싶습니다.
나는 노력했다
rename 's/^*/file 1/' test*
처리 중인 파일과 일치시키기 위해 두 번째 별표를 사용할 수 있는지는 확실하지 않지만 해당 질문에도 동일한 질문이 적용됩니다.
답변1
정규식을 올바르게 사용하지 않고 있습니다. tes*
뒤에는 te
임의의 수의 s가 붙는 것을 의미하므로 이름이 다음과 같이 변경됩니다.s
test-file-1
file 1t-file-1
$ rename -n 's/tes*/file 1/' *
test-file-1 renamed as file 1t-file-1
마찬가지로, ^*
빈 문자열의 시작 항목이 일치하므로 사실상 와 비슷 ^
하지만 무한 루프가 있습니다.
$ rename -n 's/^*/file 1/' *
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 1) line 1.
example2 renamed as file 1example2
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 2) line 1.
test-file-1 renamed as file 1test-file-1
^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE / at (eval 3) line 1.
third renamed as file 1third
대신에 개행 문자를 제외한 모든 문자를 일치시키려면 .*
-를 사용해야 합니다 . 일반적으로 다음과 같습니다..
$ rename -n 's/tes.*/file 1/' *
test-file-1 renamed as file 1
$ rename -n 's/.*/file 1/' *
example2 renamed as file 1
test-file-1 renamed as file 1
third renamed as file 1
물론 마지막 명령이 문제를 일으킬 것으로 예상했습니다.