📅  最后修改于: 2023-12-03 14:56:27.394000             🧑  作者: Mango
在编写脚本时,我们经常需要在目录或其子目录中搜索特定的文件。Bash下提供了一些命令和工具来完成这个任务。本文将介绍其中的几个常用命令和工具。
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
命令也可在指定目录中查找文件,但相比于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
命令可在指定目录及其子目录中查找匹配字符串的文件。
示例:
# 查找含有字符串 "hello world" 的文件
grep -r "hello world" /path/to/directory
在Linux中,"*"和"?"是常用的通配符。它们可用于在当前目录及其子目录中查找文件。
示例:
# 查找当前目录及其子目录中所有以 ".txt" 结尾的文件
find . -name "*.txt"
# 查找当前目录及其子目录中所有以 "file1" 开头并以 ".log" 结尾的文件
find . -name "file1*.log"
这就是在Bash中搜索文件的方式及常用命令。学会它们,就能更加高效地处理文件和目录了!