파일 이름에서 "?"("?" 포함) 뒤의 모든 문자를 제거하는 방법은 무엇입니까?

파일 이름에서 "?"("?" 포함) 뒤의 모든 문자를 제거하는 방법은 무엇입니까?

여러 파일을 다운로드하고 제거하려는 파일 이름에 인증 매개변수처럼 보이는 것을 추가했습니다. 예:

file1.doc?b1h2uj3b123uiyb12
file2.xls?oi12jo3ij123oij
file3.jpg?0990xcizx0cxzczixuchbiasdu

전체 파일 폴더에서 물음표 뒤의 모든 항목을 삭제하는 쉬운 방법이 있습니까?

답변1

모든 파일 이름을 물음표와 일치시키고 를 사용하여 *\?*변수에서 다음 부분을 제거할 수 있습니다. 물음표 자체는 와일드카드 문자이므로 두 경우 모두 이스케이프해야 합니다.?${var%%\?*}

파일에 대한 간단한 루프를 실행하고 실행하면 mv트릭을 수행할 수 있습니다.

for f in ./*\?*; do
    echo mv -n "$f" "${f%%\?*}"
done

( echo변경하기 전에 수행할 작업을 확인할 수 있도록 존재합니다. 출력이 합리적으로 보이면 제거하십시오.)

답변2

Perl 유틸리티 사용 rename:

$ rename -v -n 's/[?].*//' *[?]*
rename(file1.doc?b1h2uj3b123uiyb12, file1.doc)
rename(file2.xls?oi12jo3ij123oij, file2.xls)
rename(file3.jpg?0990xcizx0cxzczixuchbiasdu, file3.jpg)

s/[?].*//그러면 각 이름에 Perl 대체가 적용됩니다 . 첫 번째 물음표 앞의 이름이 잘립니다. 파일 이름 *[?]*와일드카드 패턴은 물음표가 포함된 현재 디렉터리의 모든 이름으로 확장됩니다.

-n실제로 파일 이름을 바꾸지 않고 명령을 실행합니다 .

관련 정보