%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
#! /usr/bin/env bash find_name(){ find test -name "*[\\/:\*\?\"<>\|]*" -o -name "*." } check_name() { if [ "$(find_name | wc -l)" != "0" ]; then printf '%s\n\n' "The following filenames contain unwanted characters:" find_name printf '\n%s\n%s\n' "Please run ./rename_test.sh" "If the problem persist, please open an issue." exit 1 else echo "Ok" fi } rename_test() { local filename local new_filename while read -r filename; do # Even though it looks < and > are replaced by the same < and >, the latters are not ASCII code # If you check with 'cat -v rename_test.sh' you would see 's/</M-KM-^B/g' and 's/>/M-KM-^C/g' # M-KM-^B -> U+02C2 # M-KM-^C -> U+02C3 new_filename=$(echo "$filename" | sed -r \ -e "s/\"/'/g" \ -e 's/</˂/g' \ -e 's/>/˃/g' \ -e 's/^(.*)\.$/\1/' ) printf '%s\n%s\n\n' "$filename" "$new_filename" [ "$filename" != "$new_filename" ] && git mv "$filename" "$new_filename" done < <(find_name) if [ "$(find_name | wc -l)" != "0" ]; then echo "Still some files to treat:" find_name else echo "Done" fi } main() { if [ "$1" = "--check" ]; then check_name else rename_test fi } main "$@"