* 在目录路径的末尾

kab*_*ras 6 scripting bash directory path

我对*bash 脚本中目录路径末尾的字符有疑问。

我有一个脚本,一旦它们变老,它应该会自动从服务器中删除一些档案。该脚本在机器 A 上,我需要在机器 B 上运行它。我通过ssh(没有 sudo,只是普通用户)远程访问两台机器。该脚本的规则之一是它只需要删除以dirA/dirB/dirC/dirD/dirE*.

但是,dirE那个位置没有,所以我猜测*代表某些变量。这就是我想知道的,*目录路径末尾的含义是什么,它使脚本做什么?

ter*_*don 9

*这里是一个“通配字符”和手段“匹配0个或多个字符”。为了说明,考虑这个目录:

$ ls
dirA  dire  dirE  dirEa  dirEEE
$ echo dirE*
dirE dirEa dirEEE
Run Code Online (Sandbox Code Playgroud)

正如你可以在上面看到,水珠dirE*匹配dirEdirEadirEEE而不是dirAdire(* nix系统是区分大小写)。

因此,在您的脚本中,这意味着它将从dirA/dirB/dirC/dirD/名称以dirE.

  • @kabras 是的,请提出一个新问题。如果您在编辑脚本时需要帮助,请确保在问题中包含该脚本。我还建议您先阅读一个简单的 shell 脚本教程,以至少了解该语言的工作原理。 (4认同)

Sté*_*las 6

我只是在这里为那些出于另一个原因参加此问答的人添加注释。

如果您*ls(实际上是 of 的ls -F,但ls有时别名为ls -F(或ls-F内置的tcsh) 或 ofzshtcsh完成的输出中的文件名末尾看到 a ,那是完全不同的东西。

使用该-F选项,ls在某些特殊文件名的末尾添加一个尾随字符以帮助识别它们的特殊性zshtcsh在列出文件名完成时执行相同的操作。

如果你看到:

$ ls -F
dir/  fifo|  file  link@  ls*  socket=
Run Code Online (Sandbox Code Playgroud)

那些/, |,*=不是文件名的一部分(尽管如果有人试图欺骗您,它们可能是),但附加ls在 告诉您:

  • dir是一个目录 ( /)
  • fifo是一个命名管道/fifo ( |)
  • link是符号链接 ( @)
  • ls是一个可执行的常规文件 ( *)(其权限中至少有一个执行位)
  • socket是 Unix 域套接字 ( =)

一些ls实现(和zsh的完成)也可以通过终端的颜色来区分,这些终端支持不同的选项。