对于文件名中的非ASCII字符,Git将以八进制表示法输出它们。例如:
> git ls-files
"\337.txt"
如果这样的字节序列不代表合法编码(对于命令行的当前编码),我无法在命令行输入相应的字符串。我怎样才能在这些文件上调用Git命令?显然,使用git ls-files
显示的字符串不起作用:
> git rm "\337.txt"
fatal: pathspec '337.txt' did not match any files
使用msysgit 1.7.10(git版本1.7.10.msysgit.1)在Windows上测试
答案 0 :(得分:9)
在Bash中,您可以将printf
用于此目的:
$ echo `printf "\337.txt"`
▒.txt
$ git rm `printf "\337.txt"` # this would pass the awkward filename to git
显然,问题是shell不执行八进制转义,git也不执行。但printf
确实如此。
此外,echo -e
可以进行八进制转义:
$ echo -e '\0337.txt'
▒.txt
但是这种用法有点气馁,你应该尽可能地选择printf
。