Обработка специальных символов, таких как $ '\ 346' на bash - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть несколько файлов с такими символами, как $'\351' и $'\346'. Я не понял, как ссылаться на эти файлы в Bash. Как я могу использовать mv и sed, чтобы изменить их имена?

Когда я запускаю ls, один из файлов, который появляется, например, отображается как:

'根'$'\346''%8B'$'\240''.html'

1 Ответ

0 голосов
/ 18 сентября 2018

Большинство пользователей в этой ситуации хотели бы использовать convmv для преобразования кодировки таких имен файлов.

Однако, поскольку вы на самом деле не знаете или не заботитесь о том, каким должно быть исходное имя файла, а просто хотите, чтобы обратимое преобразование облегчало работу с именами, вы можете переименовать все файлы в hexdump их байтов:

export LC_ALL=C
for f in *
do
  mv -- "$f" "$(printf '%s' "$f" | od -t x1 -An | tr -cd 'a-f0-9')"
done

Это будет, например, превратить файл '根'$'\346''%8B'$'\240''.html' в e6a0b9e6253842a02e68746d6c

...