Git:如何在命令行上指定包含八进制表示法的文件名

时间:2012-05-21 14:51:41

标签: git encoding notation octal

对于文件名中的非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上测试

1 个答案:

答案 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