cd 到已知路径中名称未知的目录

les*_*ese 5 bash directory shell-script

我正在尝试自动部署经常更新的开发中的 web 应用程序。webapp 以 zip 文件的形式出现,名称未知,目录结构如下:

unknown_name.zip
  ??? unknown_folder_name
     ???all_the_application_files
Run Code Online (Sandbox Code Playgroud)

我需要一个 bash 脚本来:

  • 删除 /var/www/ [完成] 的所有内容
  • 在给定的 tmp 路径中解压缩 unknown_name.zip 档案 [done]
  • cd 在已知的 tmp 路径中 [完成]
  • cd 在从 unknown_name.zip 中提取的 unknown_folder_name 中
  • 将 all_the_application_files 移动到 /var/www [如果我们解决上一个项目就很容易]

重要提示:在 tmp 目录中将只有一个目录,我想进入的目录。我当前的 bash 脚本:

unknown_name.zip
  ??? unknown_folder_name
     ???all_the_application_files
Run Code Online (Sandbox Code Playgroud)

cel*_*chk 15

解决方案

如果您确定当前目录中只有一个目录并且没有其他目录(没有其他文件夹和其他文件),您可以输入该目录

cd *
Run Code Online (Sandbox Code Playgroud)

如果您知道只有一个目录,但当前目录中可能存在非目录和非符号链接到目录的文件,则可以使用

cd */.
Run Code Online (Sandbox Code Playgroud)

仅选择目录。

解释

单*是由外壳扩展到所有的文件名(包括子目录)在当前目录列表(不包括隐藏文件,尤其是目录.和..它总是在那里)。如果当前目录中只有要进入的子目录,这将扩展为

cd unknown_folder_name
Run Code Online (Sandbox Code Playgroud)

从而做你想做的事。

诀窍*/.在于,这会扩展到.任何子目录中的“自目录”(命名为),这当然是子目录本身。由于文件名永远不能包含/,并且假设只有一个目录,因此它扩展到的唯一名称将是unknown_folder_name/.,这当然与unknown_folder_name.