bash命令rm *~
是否只删除以代字号结尾的文件,或者是否存在更高级的bash或gnu make模式?谷歌似乎无法搜索这两个符号组合。我在Makefile clean:target中找到了这个。
gnu会不会只使用隐式规则创建带尾随文件的文件?
答案 0 :(得分:7)
~
(代字号)字符在两种情况下在路径中具有特殊含义:
~user # the home directory of user
~/folder # folder inside your home directory
在大多数情况下,就是这样。您引用的命令完全按照它的样子执行:删除名称以波浪号结尾的文件。诸如emacs之类的文本编辑器以文件名结尾保存文件的备份副本。
因此,此命令可能用于从当前目录(但不是子目录)中删除这些备份副本。人们希望这样做的一个原因是目录是否会被复制到Web服务器,因为服务器端代码(例如PHP文件)可能包含敏感信息,如密码。
答案 1 :(得分:4)
正如您所猜测的,rm *~
只删除名称以波浪号(〜)结尾的文件。以代字号结尾的文件名通常是由编辑者创建的备份文件(特别是,emacs是使用此约定的早期编辑之一)。编辑源代码后,通常会遗留许多这些文件。这就是Makefile中clean
目标删除这些目标的原因。
*~
是否是某种特殊的bash模式与大多数makefile无关,因为默认情况下/ bin / sh用于执行make recipes。只有在makefile中设置了SHELL才会使用不同的shell。
查看make的隐式规则的简单方法是在没有makefile的目录中运行make -p
。您将收到一条错误消息,指出没有指定目标,但make也将打印出它正在使用的隐式规则。如果你为波形符输入grep这个输出,你会看到没有用它命名文件的隐式规则。
答案 2 :(得分:2)
不,就是你所说的。删除以~
结尾的文件。
编辑 - > ~
字符可能具有的唯一特殊含义,是当前用户主目录(如$HOME
)的简写,但仅限于路径的开头。
答案 3 :(得分:1)
我使用该命令擦除以“〜”结尾的文件。我认为没有与波形符号相关联的特殊转义字符。
答案 4 :(得分:1)
实际上,你的两种可能性都是正确的。
没有与~
关联的通配符或特殊文件名语法,除非它出现在单词的开头。
但是,如果{{{} mv(1)
和cp(1)
程序在大多数Linux发行版 1 上自动生成以tilde 结尾的文件名模式 1}} (备份)选项已指定且目标文件存在。此类系统上的make规则可能包含-b
或mv -b ...
命令。
1。但不是在Mac或BSD上。