Bash 命令用于 cd 进入我知道存在但不知道名称的目录

Bash 命令用于 cd 进入我知道存在但不知道名称的目录

技术细节:Ubuntu 20.04 左右,编写 bash 脚本。

我正在编写一个脚本,用于接收大量 tar.gz 文件,解压它们,并将其组件复制到临时目录中,每个 tar.gz 文件一个。我们将各个目录称为 tempN,其中 N 是目录编号。到目前为止,它运行良好,没有问题。

现在,在这些 tar 文件中,以下两件事之一将成立:

  1. 创建它们的用户将他们的资料打包到另一级目录中,因此现在有一个目录 tempN/someUserDirectory。我不知道 someUserDirectory 的名称,因为这取决于用户想如何命名。但我确信该用户目录中没有子目录,因此我需要从用户那里获取的文件完全位于该目录中(如果用户选择创建子目录,则不在 tempN 中)
  2. 用户没有创建子目录,因此他们的文件位于 tempN 目录本身中

在案例 1 中,我需要将文件从 tempN/someUserDirectory 传输到 tempN 本身,以便处理用户文件。但由于我不知道 someUserDirectory 的名称,我该怎么做?有没有相反的 .. 可以让我更深入一层?

答案1

提取后,计算输出目录中的项目数:

declare -a items=("$outdir"/*)

(你大概可以假设你的用户不会给你.dotfiles,我猜?)

如果只有一个项目,并且它是一个目录,

if (( ${items[@]} == 1 )) && [[ -d "${items[0]}" ]]

然后只需将其名称添加到输出路径,然后继续处理 $outdir 即可:

outdir=${items[0]}

另一种方法是列出档案中的所有文件,并检查它们是否都具有相同的第一个路径组件,如果是,则使用 tar 的选项在提取时删除组件。但是,列出 .tar 档案中的文件可能与提取它一样慢,因此此方法更适合 .zip/.rar 档案(具有中央文件索引)。

相关内容