git - 如何在 git checkout 中使用八进制字符?

标签 git shell utf-8 status git-checkout

我有一个我的音乐文件的 git 存储库,我最近发现其中一些已被删除。 我想我不小心删除了它们,但是现在我只是短暂地 Revel 于我有先见之明的事实 使用 git repo,所以我当前的 git status 验证它们已被删除。以下是一些 list :

# deleted:  Steve_Erquiaga-Cafe_Paradiso/03 - Arioso__J.S._Bach_.flac
# deleted: "Steve_Erquiaga-Cafe_Paradiso/04 - S\303\203\302\251r\303\203\302\251nade__Rachmaninov__from_Moreaux_de_fantasie.flac"
# deleted: "Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream__Faure___Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac"
# deleted:  Steve_Erquiaga-Cafe_Paradiso/06 - Prelude_in_C_Minor__J.S._Bach__from_The_Well-Tempered_Clavier.flac
# deleted:  Steve_Erquiaga-Cafe_Paradiso/07 - If_Dreams_Could_Dance__Erquiaga_.flac

我已经通过以下方式恢复了一首名称中不包含特殊字符的歌曲:

$git checkout "copy/pasted-in_name_from the output above"

然而,某些名称中的特殊字符阻碍了我恢复它们的简单方法:

$git checkout 'Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream__Faure___Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac'

错误:

pathspec 'Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream_Faure__Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac' did not match any file(s) known to git.

我想这本身不是 git 问题,而是 shell 特殊字符转义或翻译问题。 我尝试将显示的名称用双引号引起来,但我得到了相同的消息。我还尝试使用外部双引号并在每个“内部双引号”前面加上反斜杠,获得相同类型的错误消息。

我如何构建一个可以使用这些文件名的 git checkout 命令?

最佳答案

您可以尝试使用 printf,它可以理解 3 个字符的八进制转义,例如:

git checkout -- "$(printf "Steve_Erquiaga-Cafe_Paradiso/05 - After_a_Dream__Faure___Apr\303\203\302\250s_Une_R\303\203\302\252ve_.flac")"

恐怕我还没有测试过这个,但我认为它应该可以工作。

关于git - 如何在 git checkout 中使用八进制字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151820/

相关文章:

git - 如何在推送时自动部署我的 git repo 的子模块?

git - 在 git 中显示两个提交的非 merge 差异

git - 检查管道中的git是否有变化

java - 如何在调用继续进程时结束 C Shell 脚本

regex - bash 脚本正则表达式匹配

linux - 使用 mkdir 和 touch 创建目录结构

php - Symfony 3 部署到 Azure - 路由问题

c# - 如何修复空格的 UTF 编码?

python - Django:非ASCII字符

PHP/MySQL 编码问题。 ★代替某些字符