bash命令“rm *〜”有什么作用?

时间:2011-01-01 00:35:58

标签: bash syntax gnu-make

bash命令rm *~是否只删除以代字号结尾的文件,或者是否存在更高级的bash或gnu make模式?谷歌似乎无法搜索这两个符号组合。我在Makefile clean:target中找到了这个。

gnu会不会只使用隐式规则创建带尾随文件的文件?

5 个答案:

答案 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规则可能包含-bmv -b ...命令。


1。但不是在Mac或BSD上。