📌  相关文章
📜  排除具有特定模式的目录: - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:54:42.790000             🧑  作者: Mango

排除具有特定模式的目录:- Shell-Bash

在Shell脚本中,我们有时候需要在处理目录结构时排除一些具有特定模式的目录,这时候我们可以使用Shell Globs和find命令来完成这个任务。

使用Shell Globs

Shell Glob是一种通配符(*、?、[]、{})的使用方式,用于匹配文件路径名。我们可以使用Shell Globs来排除具有特定模式的目录。

例如,我们有一个目录结构如下:

├── dir1
│   ├── sub_dir1
│   └── sub_dir2
├── dir2
│   ├── sub_dir3
│   └── sub_dir4
└── dir3
    ├── sub_dir5
    └── sub_dir6

如果我们需要排除名字以“dir3”为开头的目录,可以使用以下Shell Globs:

$ ls -d !(dir3*)/

其中,!(dir3*) 表示排除以“dir3”为开头的目录,/ 表示只显示目录。运行以上命令后,输出如下:

dir1/  dir2/
使用find命令

除了Shell Globs外,我们还可以使用find命令来排除具有特定模式的目录。find命令是Linux中用于查找文件的命令,可以根据名称、大小、时间等多种属性查找文件。

例如,我们有一个目录结构如下:

├── dir1
│   ├── sub_dir1
│   └── sub_dir2
├── dir2
│   ├── sub_dir3
│   └── sub_dir4
└── dir3
    ├── sub_dir5
    └── sub_dir6

如果我们需要排除名字以“dir3”为开头的目录,可以使用以下find命令:

$ find . -type d ! -name 'dir3*' -print

其中,. 表示当前目录,-type d 表示只查找目录,! -name 'dir3*' 表示排除名字以“dir3”为开头的目录。运行以上命令后,输出如下:

.
./dir1
./dir2
./dir2/sub_dir3
./dir2/sub_dir4
./dir1/sub_dir1
./dir1/sub_dir2

以上是排除具有特定模式的目录的两种方法,通过对Shell Globs和find命令的了解,我们可以更加灵活地处理目录结构。