Git: как указать имена файлов, содержащие восьмеричные обозначения в командной строке
Для не-ASCII символов в именах файлов Git будет выводить их в восьмеричной записи. Например:
> git ls-files
"\337.txt"
Если такая последовательность байтов не представляет допустимую кодировку (для текущей кодировки командной строки), я не могу ввести соответствующую строку в командной строке. Как я могу по-прежнему вызывать команды Git для этих файлов? Очевидно, что с помощью строки, которая отображается git ls-files
не работает:
> git rm "\337.txt"
fatal: pathspec '337.txt' did not match any files
Протестировано на Windows, с msysgit 1.7.10 (git version 1.7.10.msysgit.1)
1 ответ
В Bash вы можете использовать printf
для этой цели:
$ echo `printf "\337.txt"`
▒.txt
$ git rm `printf "\337.txt"` # this would pass the awkward filename to git
Проблема, очевидно, в том, что оболочка не выполняет восьмеричного экранирования, как и git. Но printf
делает.
Также, echo -e
может сделать восьмеричное экранирование:
$ echo -e '\0337.txt'
▒.txt
Но это использование немного не рекомендуется, вы должны предпочесть printf
где ты можешь.