2012-05-21 49 views
6

對於文件名中的非ASCII字符,Git將以八進制表示法輸出它們。例如: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版本1.7.10.msysgit.1)

+0

請參閱[如何讓Git在控制檯窗口中正確顯示UTF-8編碼路徑名?](https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8 -encoded-路徑名,在最控制檯窗口)。 'git config --global core.quotepath off' –

回答

9

在bash中,你可以使用printf對於這種目的:

$ echo `printf "\337.txt"` 
▒.txt 

$ git rm `printf "\337.txt"` # this would pass the awkward filename to git 

的問題是,很明顯,該外殼不執行八進制轉義,同樣沒有飯桶。但printf呢。


此外,echo -e可以做到八進制轉義:

$ echo -e '\0337.txt' 
▒.txt 

但是,使用是有點氣餒,你應該更喜歡printf在那裏你可以。

+0

我該如何將它與Git命令結合使用?如果我安裝了msysgit會怎麼樣? – mstrap

+0

@mstrap我希望msys提供了一個'printf'工具,因爲它是一個標準的posix。你應該嘗試一下,如果它對你有用。另請參閱編輯。 – ulidtko

+1

在msysgit的bash中,printf版本完美工作。謝謝! – mstrap

相關問題