*有什么作用?

时间:2018-09-15 13:11:43

标签: shell unix glob

最近在一次采访中有人问我一个问题-如何删除名为“ *”的文件? 因此,我尝试将文件创建为-触摸*。当我列出时,我看不到该文件。当我编辑(vi *)。我打开了一个随机文本文件。 那么触摸*是什么?

3 个答案:

答案 0 :(得分:1)

Shell展开*touch *touch every nonhidden file in the current directory。如果要创建一个字面名称为*的文件,则需要引用该文件:touch \*(或touch '*'touch "*"以及与其他命令(例如{{1 }}。

答案 1 :(得分:1)

您应该查找unix的“ globbing”。

除非会转义此特殊字符*或将其放在单引号'*'内,否则外壳程序将查看命令并将*替换为每个文件(不是以'。'开头或隐藏)。

您可以使用此命令将命令应用于许多文件,而无需实际手动列出它们。

如果要查看*扩展了什么以及如何将其转义,可以运行以下命令:

  echo *
  echo '*'
  echo \*

您也可以将其用于更具体的模式,例如

  <command> a* # run the command on the list of file starting with a

如果要查看运行时终端实际执行的操作,请触摸*运行:

 echo touch * 

正如其他人之前解释的,touch命令将在文件名不存在的情况下创建一个空文件,或者在现有文件上更新上次修改的时间戳。因此,您刚刚更新了在其中执行命令的目录中每个非隐藏文件的最后修改的时间戳。

请注意,这是在调用命令之前发生的。而且,如果文件列表非常大(百万),您将收到一条错误消息,因为文件列表太大而无法容纳命令缓冲区(又名扩展命令的字符串将太大)

进一步阅读:https://www.linuxjournal.com/content/bash-extended-globbing

答案 2 :(得分:0)

根据man touchtouch更改文件的时间戳。如果该文件不存在,则除非指定-c-h参数,否则它将创建为空。

在Bash中,*是通配符,它​​会扩展到当前目录中的每个非隐藏文件和目录。这意味着touch *会将当前目录中每个文件和目录的时间戳(如果有的话)更改为当前日期和时间。

相关问题