解决方案

解决方案

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

unknown_name.zip
  └── unknown_folder_name
     └──all_the_application_files

我需要一个 bash 脚本来:

  • 删除 /var/www/ 的所有内容 [完成]
  • 在给定的临时路径中解压缩unknown_name.zip存档[完成]
  • cd 到已知的 tmp 路径中 [完成]
  • cd 从unknown_name.zip 中提取的unknown_folder_name 内
  • 将 all_the_application_files 移动到 /var/www [如果我们解决了前面的问题就很容易]

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

rm -r /var/www/*
unzip ./\*.zip \* -d /home/lese/tmp-deploy
cd /home/lese/tmp-deploy
# HERE I WOULD cd unknown_folder_name
mv * /var/www/

答案1

解决方案

如果您确定当前目录中只有一个目录并且没有其他目录(没有其他文件夹和文件),则可以使用以下命令进入该目录

cd *

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

cd */.

仅选择目录。

解释

单个文件*被 shell 扩展为当前目录中所有文件名(包括子目录)的列表(不包括隐藏文件,尤其是始终存在的目录.和)。..如果当前目录中唯一的内容是要输入的子目录,则该子目录将扩展为

cd unknown_folder_name

然后做你想做的事。

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

相关内容