Server : LiteSpeed System : Linux us-imm-web1923.main-hosting.eu 5.14.0-503.23.2.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Feb 12 05:52:18 EST 2025 x86_64 User : u980034691 ( 980034691) PHP Version : 8.2.27 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail Directory : /home/u980034691/.nvm/ |
#! /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 "$@"