使用“find”从目录创建 2 个子目录的列表

使用“find”从目录创建 2 个子目录的列表

我需要编制一个目录列表,以便稍后使用 Restic 进行备份。我需要每个子域内恰好有两个目录包含在该列表中。其他所有内容都不应备份。

目录结构如下:

subdomain1.domain.tld
|- other_directory1
|- public_html
   |- backup1
   |- backup2
   |- no_backup1
   |- no_backup2
   |- no_backup3
subdomain2.domain.tld
|- other_directory1
|- public_html
   |- backup1
   |- backup2
   |- no_backup1
   |- no_backup2
   |- no_backup3
subdomain3.domain.tld
|- other_directory1
|- public_html
   |- backup1
   |- backup2
   |- no_backup1
   |- no_backup2
   |- no_backup3

最后,我希望我的列表如下所示:

/path/to/my/subdomains/subdomain1.domain.tld/public_html/backup1
/path/to/my/subdomains/subdomain1.domain.tld/public_html/backup2
/path/to/my/subdomains/subdomain2.domain.tld/public_html/backup1
/path/to/my/subdomains/subdomain2.domain.tld/public_html/backup2
/path/to/my/subdomains/subdomain3.domain.tld/public_html/backup1
/path/to/my/subdomains/subdomain3.domain.tld/public_html/backup2

到目前为止我有这个:

find /path/to/my/subdomains -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | sort | xargs readlink -f > list.txt

这给了我所有子域的列表,但不是public_html/backup1每个public_html/backup1目录的列表。有什么建议如何从这里继续吗?谢谢!

答案1

查找名称以 开头的目录backup,并打印其完整路径:

find /path/to/my/subdomains -type d -name 'backup*'

如果要显式列出要备份的所有目录的全名:

find /path/to/my/subdomains -type d \( -name backup1 -o -name backup2 \)

答案2

如果您想更明确地知道在哪里可以找到这些目录,在zshshell 中,您可以执行以下操作:

print -rC1 /path/to/my/subdomains/*/public_html/(backup1|backup2)(N/)

打印它们或:

dirs=(
  /path/to/my/subdomains/*/public_html/(backup1|backup2)(N/)
)

将它们存储在数组中以供使用(( $#dirs )) && my-backup-cmd $dirs

但如果重点是为每个目录打印一个backup1and ,无论它们是否存在,你可以这样做:backup2public_html

print -rC1 /path/to/my/subdomains/*/public_html(N-/e[
  'reply=($REPLY/{backup1,backup2})'])

即使用e评估 glob 限定符返回每个public_html目录的这两个路径。

或者:

() {
  print -rC1 $^argv/{backup1,backup2}
} /path/to/my/subdomains/*/public_html(N-/)

这次使用一个匿名函数,该函数将这些public_html目录作为参数,并将 和 附加/backup1/backup2它们后面。

相关内容