53 lines
1.2 KiB
Bash
53 lines
1.2 KiB
Bash
|
#! /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 "$@"
|