파일 이름에 ..(마침표 2개)가 포함된 수백 개의 파일 이름을 바꾸고 ..를 -(하이픈)로 변경하려면 rename 명령을 사용해야 합니다. 마침표가 포함되어 있다는 사실이 rename 명령을 혼동하는 것 같습니다.
다음은 몇 가지 파일 이름 예입니다.
20180201_190000_TX_AJAX..HHE_instrument_0456
20180201_190000_TX_AJAX..HHN_instrument_0456
20180201_190000_TX_AJAX..HHZ_instrument_0456
링크된 것처럼 보이도록 이 파일의 이름을 바꿔야 합니다.
20180201_190000_TX_AJAX-HHE_instrument_0456
20180201_190000_TX_AJAX-HHN_instrument_0456
20180201_190000_TX_AJAX-HHZ_instrument_0456
이 명령은 다음과 같습니다.
rename 's/../-/' *
결과는 다음과 같은 파일 이름입니다.
-180201_190000_TX_AJAX..HHE_instrument_0456 -180201_190000_TX_AJAX..HHN_instrument_0456 -180201_190000_TX_AJAX..HHZ_instrument_0456
주기에는 특별한 목적이 있는 것 같아서 혼란스럽습니다. 그런 다음 이것을 시도했습니다.
rename 's/..H/-H/' *
예제의 AJAX는 하나의 사이트를 나타내며 이러한 사이트는 서로 다릅니다. 위 구문은 작동하며 "20180201_190000_TX_AJAX-HHE_instrument_0456"을 생성합니다. 이는 많은 스테이션에서 예상되지만 다른 스테이션에서는 예상치 못한 결과입니다.
20180201_000000_SA.AKHBR..HNE_instrument_0542 renamed as 20180201_000000_SA.-HBR..HNE_instrument_0542
20180201_000000_SA.KSHB4..HHE_instrument_0935 renamed as 20180201_000000_SA.-HB4..HHE_instrument_0935
20180201_000000_SA.HTM01..HHE_instrument_0933 renamed as 20180201_000000_S-HTM01..HHE_instrument_0933
문자 H가 포함된 방송국은 모두 혼란스러운 것 같습니다.
참고로 AJAX는 사이트 코드이고 사이트 코드 길이는 4~5자 입니다.
다음으로 나는 이것을 시도했다:
rename ‘s/SA.????..H/SA.????-H/ * -n
하지만 이렇게 하면 오류가 발생합니다.
"Nested quantifiers in regex; marked by <-- HERE in m/SA.??? <-- HERE ?..H/ at (eval 1) line 1."
그래서 와일드카드를 좋아하지 않는 것 같아요.
당신이 제공할 수 있는 도움에 감사드립니다.
답변1
답변2
점은 모든 문자와 일치하므로 이중 점은 파일 이름의 처음 두 문자와 일치하므로 이러한 문자는 대시로 대체됩니다 rename
. 정규식에서 각 점을 이스케이프 \.
하거나 루프를 사용합니다(이는 에 대해 작성되었습니다 bash
).
for name in ./*..*; do
newname=${name/../-}
printf 'Would move %s to %s\n' "$name" "$newname"
# mv -i "$name" "$newname"
done
한 번 실행하여 올바른 내용이 출력되는지 확인한 후 삭제 #
하고 다시 실행하세요.
이 루프는 두 개의 연속 지점을 포함하는 현재 디렉터리의 모든 이름을 반복합니다. 매개변수 ${name/../-}
대체는 두 개의 연속된 점이 처음 나타나는 것을 대시로 대체합니다. 이것은 쉘 파일 이름 글로빙 패턴이므로 점은 어떤 면에서 특별하지 않습니다.