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 где ты можешь.

Другие вопросы по тегам