Emacs Dired:重复文件(操作,而不是如何删除';em)

Emacs Dired:重复文件(操作,而不是如何删除';em),emacs,dired,Emacs,Dired,有时我想创建一些文件(比如配置文件)的副本,这些文件最初应该与初始文件具有相同的内容。因此,我希望能够在dired中标记一些文件并“复制”它们,此复制过程的工作原理与大多数文件管理器在粘贴到原始目录时使用的复制过程类似:附加复制的文件名get“(Copy)”(就在文件扩展名之前) 我似乎找不到这样的内置dired函数,也许有人可以帮助/已经创建了这样的函数 非常感谢您的帮助 有一个函数可以满足您的需要:dired do copy regexp 使用示例: 标记文件 M-x dired do co

有时我想创建一些文件(比如配置文件)的副本,这些文件最初应该与初始文件具有相同的内容。因此,我希望能够在dired中标记一些文件并“复制”它们,此复制过程的工作原理与大多数文件管理器在粘贴到原始目录时使用的复制过程类似:附加复制的文件名get“(Copy)”(就在文件扩展名之前)

我似乎找不到这样的内置dired函数,也许有人可以帮助/已经创建了这样的函数


非常感谢您的帮助

有一个函数可以满足您的需要:
dired do copy regexp

使用示例:

  • 标记文件
  • M-x dired do copy regexp
  • \(.*)\.\(.*)
  • \1(复制)。\2
  • 对于名为foo.txt的文件,您将创建另一个名为foo(copy.txt)的文件


    请注意,我的第一个regexp有两个组,第二个regexp引用它们。如果需要的话,你可以做更复杂的事情。

    也许你会想重命名这些函数(我没有想出更好的名字),如果你愿意的话,也许会有更复杂的格式

    (自定义方向保留标记版本?V
    “控制版本化文件的标记。
    如果为t,则版本化文件将标记为与相应的原始文件相同。
    如果是字符,则复制的文件将无条件地标记为该字符。“
    :type'(选项(const:tag“Keep”t)
    (字符:标记“标记”))
    :组“方向标记”)
    (取消定向版本文件(从到ok标志)
    (直接句柄覆盖到)
    (dired copy file recursive from to ok标志dired copy preserve time t
    dired递归副本)
    (定义定向do版本(&可选参数)
    “在文件名中搜索数字模式并创建该文件的版本
    如果该数字增加1,或者,如果该文件已经存在,
    将搜索具有相似名称的文件,每次递增计数器
    一次又一次。
    此外,如果使用前缀参数调用,将提示输入数字格式。
    格式与“format”函数使用的格式相同。”
    (交互式“P”)
    (let((fn list(dired get marked files nil nil)))
    (直接创建文件)
    (功能导向版本文件)“版本”fn列表
    (功能
    (兰姆达(来自)
    (let(新名称(i0)(fmt(如果是arg(读取字符串“版本格式:“%d”)“%d”))
    (while(或(空新名称)(file-exists-p新名称))
    (setq)新名称
    (如果(字符串匹配“^\([^0-9]*\)\([0-9]+\)\(.\\)$”来自)
    (concat(从中匹配字符串1)
    (格式fmt)
    (+(字符串到数字(从中匹配字符串2))(1+i)))
    (从中匹配字符串3))
    (concat来自(格式(concat.“fmt)i)))
    i(1+i)))新名称)
    dired保持标记(版本)
    (定义键定向模式映射(kbd“c”)‘定向do版本)
    

    另外,我最初使用v来绑定这个函数,因为我没有使用
    dired视图
    ,但是您需要在
    dired
    s钩子中绑定它。c只是第一个未定义的键,所以我使用了它。

    在Dired模式下,将光标放在要复制的文件上或标记该文件,然后按“c”。系统将提示您输入新名称

    您也可以使用此功能在Dired缓冲区之间复制文件。要将其放入init文件中,请执行以下操作:
    (setq dired dwim target t)

    我喜欢这个!很好,很简单,提醒我在发布问题之前应该尝试使用regexps,所以…;-)但是,这不能扩展到自动检测是否已经存在
    (副本)
    (不是标记的文件),如果这是真的,则附加更多
    (副本)
    字符串,直到文件名是唯一的?[并不是说我真的会使用它…您的初始解决方案就足够了,但是我很好奇]。如果您想处理存在副本的情况,您应该查看变量
    dired backup overwrite
    (来自dired aux.el)和
    backup directory alist
    。前者控制在覆盖文件之前是否进行备份,后者控制如何命名备份。第3点看起来像一群啦啦队队员是的!绝对是一个非常酷的片段,以及!我想到了两个补充:1)如果使用前缀
    C-u
    调用,则要求输入字符串而不是数字;2)检查版本是否已经存在,并相应地递增。我不知道添加这些功能会有多复杂和耗时…@elemakil当前,如果新创建的名称存在,它将提示您重命名该文件。。。也许会有一个自动的解决方案。。。今天晚些时候我会看一看。在编写这段代码时,我发现了许多
    dired
    命令的默认行为…:)
    C-u
    对于它们意味着如果有一个标记的目录,它将使用该目录作为目标。但是,当然,它可以做更多的前缀。“今天晚上我会更仔细地修改它。”埃莱马基尔:嗯,事实证明,这两件事都比我想象的容易。它似乎在一般情况下工作,但如果注意到任何问题,欢迎您提醒我:)这个函数似乎不会造成任何伤害,因为它不会删除文件,也不会覆盖,但我仍然会小心,以防万一。但有了它,您不能复制多个文件-或者,我还不知道如何重命名多个文件