📌  相关文章
📜  目录中的 bash 搜索文件 - Shell-Bash (1)

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

目录中的 Bash 搜索文件

在编写脚本时,我们经常需要在目录或其子目录中搜索特定的文件。Bash下提供了一些命令和工具来完成这个任务。本文将介绍其中的几个常用命令和工具。

find

find命令可在指定目录中查找文件。它的常用语法为:

find [path] [expression]

path参数指定要搜索的目录。expression参数为可选项,可以是搜索条件、时间戳等等。

示例:

# 在当前目录及其子目录中查找名称为 "file.txt" 的文件
find . -name "file.txt"

# 在 /etc 目录中查找以 "emacs" 开头的文件
find /etc -name "emacs*"

# 在 /var/log 目录中查找 3 天以内修改过的以 ".log" 结尾的文件
find /var/log -type f -name "*.log" -mtime -3
locate

locate命令也可在指定目录中查找文件,但相比于find,它更快捷。因为它不会遍历目录树,而是查找已经建立的文件索引。

在大多数Linux系统中,默认情况下,locate命令每天会更新一次索引。如果要在搜索之前更新索引,可运行以下命令:

sudo updatedb

示例:

# 在文件系统中查找名称为 "file.txt" 的文件
locate file.txt

# 在 /usr/bin 目录中查找以 "ping" 开头的文件
locate /usr/bin/ping*

# 在 /var/log 目录中查找 3 天以内修改过的以 ".log" 结尾的文件
locate -b '\*.log' | xargs ls -l --time-style='+%Y-%m-%d' | awk '$6 >= "'$(date -d '3 days ago' '+%Y-%m-%d')'" {print $0}'
grep

如果我们知道文件名,但不知道它在哪个目录中,grep命令就派上用场了。grep命令可在指定目录及其子目录中查找匹配字符串的文件。

示例:

# 查找含有字符串 "hello world" 的文件
grep -r "hello world" /path/to/directory
文件名通配符

在Linux中,"*"和"?"是常用的通配符。它们可用于在当前目录及其子目录中查找文件。

示例:

# 查找当前目录及其子目录中所有以 ".txt" 结尾的文件
find . -name "*.txt"

# 查找当前目录及其子目录中所有以 "file1" 开头并以 ".log" 结尾的文件
find . -name "file1*.log"

这就是在Bash中搜索文件的方式及常用命令。学会它们,就能更加高效地处理文件和目录了!