📅  最后修改于: 2023-12-03 15:13:37.695000             🧑  作者: Mango
在Shell编程中,查找文件是一项非常常见的任务。Bash为我们提供了一些非常强大的命令和操作符来查找、筛选和排序文件。
find
命令是Linux系统中最常见的查找文件命令之一。它可以在整个文件系统中递归地查找文件,通过不同的选项可以根据多种条件来限制查找范围和结果。
以下是一些常见的find
命令用法:
# 查找当前目录下所有扩展名为.txt的文件
find . -type f -name "*.txt"
# 查找home目录下所有文件并按照修改时间排序
find ~ -type f -print0 | xargs -0 ls -lt
# 查找当前目录下所有大于10MB的文件并删除
find . -type f -size +10M -exec rm {} \;
其中,-type
选项可以用于指定查找的类型,包括文件(f
)和目录(d
);-name
选项可用于指定文件名或文件名的通配符;-size
选项可用于指定文件大小;-exec
选项可用于执行指定的命令。
更多find
命令的选项和用法请参考man find
命令。
locate
命令是通过搜索数据库来查找文件的,它比find
命令更快,并且可以一次性查找整个系统中的所有文件。
以下是一些常见的locate
命令用法:
# 查找所有包含config字样的文件
locate config
# 查找所有以.conf为扩展名的文件
locate *.conf
# 更新locate数据库
sudo updatedb
需要注意的是,locate
命令默认会查找整个系统中的所有文件,可能会返回大量的结果,因此建议使用关键字进行限制。
更多locate
命令的选项和用法请参考man locate
命令。
Bash提供了多种运算符,可以用于对查找结果进行筛选和排序。
| 运算符 | 描述 | 示例 |
| ------ | ------------------------------- | --------------- |
| +
| 加 | expr $a + $b
|
| -
| 减 | expr $a - $b
|
| *
| 乘 | expr $a \* $b
|
| /
| 除 | expr $a / $b
|
| %
| 取模 | expr $a % $b
|
| ++
| 自增 | a=10; b=++a
|
| --
| 自减 | a=10; b=--a
|
需要注意的是,在计算除法时,可以使用bc
命令进行高精度计算:
# 计算10/3
echo "scale=2; 10/3" | bc
| 运算符 | 描述 | 示例 |
| ------ | --------------- | ------------------ |
| =
| 等于 | [ $a = $b ]
|
| !=
| 不等于 | [ $a != $b ]
|
| -eq
| 等于 | [ $a -eq $b ]
|
| -ne
| 不等于 | [ $a -ne $b ]
|
| -gt
| 大于 | [ $a -gt $b ]
|
| -lt
| 小于 | [ $a -lt $b ]
|
| -ge
| 大于等于 | [ $a -ge $b ]
|
| -le
| 小于等于 | [ $a -le $b ]
|
| >
| 大于(字符串) | [ $a > $b ]
|
| <
| 小于(字符串) | [ $a < $b ]
|
| -z
| 字符串为空 | [ -z $a ]
|
| -n
| 字符串非空 | [ -n $a ]
|
| &&
| 逻辑与 | [ $a -gt 0 && $b -gt 0 ]
|
| \|\|
| 逻辑或 | [ $a -eq 0 \|\| $b -eq 0 ]
|
需要注意的是,比较运算符需要使用[]
括起来,并且运算符和操作数之间需要使用空格分隔。
| 运算符 | 描述 | 示例 |
| ------ | --------------- | ---------------------------------------------------------------------------- |
| =
| 等于 | [ $a = $b ]
|
| !=
| 不等于 | [ $a != $b ]
|
| -z
| 字符串为空 | [ -z $a ]
|
| -n
| 字符串非空 | [ -n $a ]
|
| $
| 匹配结尾 | [ ${str$} = "end" ]
|
| #
| 匹配开头 | [ ${str#start} = "str" ]
|
| %
| 匹配结尾(通配符) | [[ $str%pat* ]]
|
| %%
| 匹配开头(通配符) | [[ $str%%pat* ]]
|
需要注意的是,在使用字符串运算符时,建议使用[[ ]]
括起来,比较运算符也要用字符串形式,即=
和!=
。
以上就是Bash中查找文件和运算符的介绍。使用这些命令和运算符,可以更加方便地查找和筛选文件,同时也提高了Shell脚本的编写效率。
希望本文对你有所帮助。