shell中使用find命令怎么指定层数
时间: 2024-01-16 10:05:11 浏览: 30
在使用 `find` 命令时,可以使用 `-maxdepth` 和 `-mindepth` 选项来指定搜索的最大深度和最小深度,即指定搜索的层数。
例如,要在当前目录及其子目录中搜索最多两层深度的所有文件和目录,可以使用以下命令:
```
find . -maxdepth 2
```
类似地,如果你只想在当前目录中搜索,可以使用以下命令:
```
find . -maxdepth 1
```
注意,`-maxdepth` 和 `-mindepth` 选项必须放在 `find` 命令的选项和参数之前。
相关问题
SUBDIRS=$(notdir $(shell find . -maxdepth 1 -type d))
这是一个 Makefile 中的语法,用于获取当前目录下的所有子目录的名称。
让我们逐步解析这个语句:
1. `find . -maxdepth 1 -type d`:这个命令使用 find 命令来查找当前目录下的所有子目录。`.` 表示当前目录,`-maxdepth 1` 表示只搜索当前目录的一层子目录,`-type d` 表示只搜索目录类型。
2. `$(shell ...)`:这是一个 Makefile 中的函数,它会执行括号内的命令,并将其输出结果返回给变量。
3. `notdir`:这是一个 Makefile 中的函数,用于删除路径部分,只保留文件或目录的名称部分。
4. `SUBDIRS = $(notdir $(shell find . -maxdepth 1 -type d))`:这个语句将通过执行 `find` 命令获取到的子目录列表赋值给 `SUBDIRS` 变量。`$(shell ...)` 执行了 `find` 命令,并将其输出结果传递给 `notdir` 函数,最终得到的是当前目录下所有子目录的名称列表。
这样,`SUBDIRS` 变量就包含了当前目录下所有子目录的名称。可以在 Makefile 中之后的部分使用 `SUBDIRS` 变量来进行相关操作。
用linux shell 并发压缩多层目录下的图片的脚本,压缩图片保存到另一目录中,
可以使用 `find` 命令找到多层目录下的所有图片,然后使用 `xargs` 命令调用 `gzip` 进行压缩。可以通过 `nohup` 命令将该命令放入后台执行,并将输出重定向到一个日志文件中。
以下是一个示例脚本:
```bash
#!/bin/bash
# 设置要压缩的文件类型
filetype="*.jpg *.jpeg *.png"
# 设置要搜索的起始目录和压缩后保存的目录
search_dir="/path/to/search"
compress_dir="/path/to/compress"
# 找到所有要压缩的文件并压缩
find "$search_dir" -type f -name "$filetype" -print0 | xargs -0 -P 4 -I {} sh -c 'gzip -c {} > "$compress_dir/$(basename {}).gz"'
# 将输出重定向到日志文件中
nohup ./compress.sh > compress.log &
```
在上面的脚本中,`-P` 参数指定了要启动的并发进程数,这里设置为 4。通过 `basename` 命令获取文件名,然后将压缩后的文件保存到指定目录中,并以 `.gz` 扩展名结尾。
你可以根据需要修改 `filetype`、`search_dir` 和 `compress_dir` 变量来适应你的需求。