?
와 같은 여러 이름 중에서 선택해야 합니다 image.jpg?foo=bar&bar=foo
. 누군가가 어떻게 수행되는지 말해 줄 수 있습니까?
어떤 이유로 다음 명령이 작동하지 않습니다.
rename "\?." "" *
rename 's/(.*)\.jpg\?.*/$1\.jpg/' *
답변1
이것은 매우 간단합니다.
이름에 " "가 포함된 각 파일에 대해 for 루프를 수행하고 있습니다 ?
.
이 for 루프는 mv
이러한 모든 파일에 대해 (== 이름 바꾸기) 명령을 호출합니다.추가하다이 파일 이름에는 " " 다음 부분이 없습니다 ?
.
정확한 명령은 다음과 같습니다.
for i in *\?*;do mv -vf "${i}" "${i%%\?*}";done
이것은 약간 비밀스러워 보일 수도 있지만 이는 다음과 같은 의미입니다 . "'i'라는 변수는 "${i%%\?*}"
꼬리에서 '' ?
뒤의 모든 항목을 제거합니다.
조금 신비한 것이 또 있는데, 그것은 부분입니다 *\?*
. ?
이름에 " "가 포함된 현재 디렉터리의 모든 파일을 나타냅니다 . 이것은 (win)do(w)s와 같은 패턴입니다. 유일한 차이점은 ' ?
'는 기본적으로 모든 문자를 의미한다는 것입니다. 백슬래시(' \
')는 이 특별한 의미를 제거하는 데 사용됩니다.