【问题标题】:How to delete files with exclamation marks! using emacs' delete-file如何删除带有感叹号的文件!使用 emacs 的删除文件
【发布时间】:2010-12-10 09:03:59
【问题描述】:

我正在尝试使 emacs 的 delete-file 函数删除名称中带有感叹号的文件。

特定的用例是我已将 emacs 设置为将所有备份文件保存在一个目录中并删除旧的备份文件。但是,当所有备份文件都放在一个目录中时,目录分隔符/会被替换为!

当对名称中带有感叹号的文件调用 delete-file 时,它​​返回零并且文件不会被删除。它不表示任何错误。通常,delete-file 返回 nil。反正emacs的备份系统是用delete-file来删除的,我宁愿不重定义整个函数,只换一行。

我试过用反斜杠反斜杠和用shell引用文件名字符串,但都没有奏效。我发现我的配置中的某些东西导致了这种情况,但我还没有弄清楚是什么。我已将问题的根源追溯到我的自定义 system-move-file-to-trash 函数,现在我必须对其进行调试。

那么,我该怎么做呢?

Emacs 版本: GNU Emacs 23.1.50.1
emacs 快照: 安装时间:1:20090730-1~jaunty1

【问题讨论】:

  • 尝试使用官方版本的 Emacs,也许问题出在这个中间版本。
  • 对于阅读本文的任何人,问题是您不应该在传递给call-process 的字符串上调用shell-quote-argument。显然call-process 绕过了外壳,所以外壳引用只会产生问题。

标签: file emacs


【解决方案1】:
M-x delete-file

然后直接输入文件名,不要转义,直接输入名称,

!home!blah!filename

它只是工作。 lisp 调用也是如此,

(delete-file "!home!blah!filename")

【讨论】:

  • 您对 delete-file 交互工作的观察为我提供了所需的线索。我怀疑我的一个自定义项以某种微妙的方式破坏了完成读取,因此即使 delete-file 没有提示我输入文件,它仍然会以某种方式破坏。
【解决方案2】:

我找到了答案。我的自定义 system-move-file-to-trash 函数,删除文件将自动使用,在文件名上不恰当地称为 shell-quote-argument。显然,使用call-process 运行的命令的参数确实 not 需要被 shell 引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2011-01-02
    • 2020-11-08
    相关资源
    最近更新 更多