find命令

news2024/11/28 6:54:19

你将看到的第一个命令是find。这是个用于搜索文件的命令,它极其有用,但Linux初学者常常觉得它不易使用,这不仅仅是因为它有选项、测试和动作类型的参数,还因为其中一个参数的处理结果可能会影响到后续参数的处理。在深入研究这些选项、测试和参数之前,让我们首先看一个非常简单的例子,它用来在本地机器上查找名为test的文件。为了确保你具有搜索整个机器的权限,请以root用户身份来执行这个命令:

find / -name test -print

 

 根据你所使用系统的不同,你可能还会找到其他几个名称也为test的文件。正如你可能猜测的那样,这个命令的含义是:从根目录开始查找名为test的文件,并且输出该文件的完整路径。这非常简单。

然而,这个命令的执行确实需要花费很长的时间,并且网络上的Windows机器的硬盘也会高速转动。这是因为Linux机器挂载(使用SAMBA)了一大块Windows机器的文件系统,看起来似乎是Windows文件系统也被搜索了,尽管我们知道要查找的文件应该在Linux机器上。

这就是我们要介绍的第一个选项发挥作用的时候了。如果你指定-mount选项,你就可以告诉find命令不要搜索挂载的其他文件系统的目录。 

# find / -mount -name test -print

 我们仍然能找到文件,但这次搜索速度会更快,同时也不必再搜索挂载的其他文件系统。find命令的完整语法格式如下所示:

find [path] [options] [tests] [actions]

path部分很容易理解:你既可以使用绝对路径,如/bin,也可以使用相对路径,如.。如果需要,你也可以指定多个路径,如find /var /home。find命令有许多选项可用,下表列出了一些主要的选项。

 -maxdepth 2

# find / -mount -maxdepth 3 -name test -print

下面是测试部分。可以提供给find命令的测试非常多,每种测试返回的结果有两种可能:true或false。find命令开始工作时,它按照顺序将定义的每种测试依次应用到它搜索到的每个文件上。如果一个测试返回false, find命令就停止处理它当前找到的这个文件,并继续搜索。如果一个测试返回true, find命令将继续下一个测试或对当前文件采取行动。下表只列出了最常用的测试,请参考find命令的手册页以了解所有可以使用的测试。

 你还可以用操作符来组合测试。大多数操作符有两种格式:短格式和长格式,如下表所示。

 你可以通过使用圆括号来强制测试和操作符的优先级。由于圆括号对shell来说有其特殊的含义,所以你还必须使用反斜线来引用圆括号。此外,如果你在文件名处使用的是匹配模式,你就必须在模式上使用引号以确保模式没有被shell扩展,而是直接传递给find命令。例如,如果你想写一个测试“搜索的文件比文件X要新,或者文件名以下划线开头”,你可以这样写:

\(-newer X -o -name "_*" \)

我们将在下一个“实验解析”部分之后举这样一个例子。

首先创建两个文件hello1 和hello2

touch hello1
touch hello2

超找比hello1新的文件,预判结果肯定是hello2

# find . -newer hello1 -print
.
./hello2

这个结果看起来不错,不过在结果中还包括了当前目录,而这并不是你想要的,你只对普通文件感兴趣。所以你会增加一个额外的测试-type f:

$ find . -newer hello1 -type f -print
./hello2

它是如何工作的呢?你指定find命令应该在当前目录(.)中搜索比文件hello1 要新的文件(-newer hello1 ),如果这个测试通过,然后再测试这个文件是否是一个普通文件(-type f)。最后,你使用前面已经讲过的-print来确认搜索到的文件。实际上不加-print也没问题,如下所示:

$ find . -newer hello1 -type f
./hello2

 现在来查找以下划线开头的文件或比hello1文件要新的文件,但在两种情况下都必须是普通文件。这个例子将演示如何使用圆括号来对测试进行组合:

创建一个带下划线的文件:并更新其他两个文件的时间戳

lkmao@ubuntu:/big/work/shell$ touch _hello3
lkmao@ubuntu:/big/work/shell$ touch hello1
lkmao@ubuntu:/big/work/shell$ touch hello2
lkmao@ubuntu:/big/work/shell$ find . \( -name "_*" -or -newer hello1 \) -type f -print
./_hello3
./hello2
lkmao@ubuntu:/big/work/shell$

可以看出完成这个任务并不是很困难。你必须转义圆括号使得它们不会被shell处理,而且还需要将*号用引号括起使得它被直接传递给find命令。

现在你已可以可靠地搜索文件了。下面来看看在发现匹配指定条件的文件之后,你可以执行的动作。下表只列出了最常见的动作,完整的动作列表请见find命令的手册页。

 -exec和-ok命令将命令行上后续的参数作为它们参数的一部分,直到被\;序列终止。实际上,-exec和-ok命令执行的是一个嵌入式命令,所以嵌入式命令必须以一个转义的分号结束,使得find命令可以决定什么时候它可以继续查找用于它自己的命令行选项。魔术字符串{}是-exec或-ok命令的一个特殊类型的参数,它将被当前文件的完整路径取代。

上面的解释可能并不容易理解,但通过一个例子可以将其解释得更清楚。我们来看一个比较简单的例子,它使用一条非常安全的命令ls:

lkmao@ubuntu:/big/work/shell$ find . -newer hello1 -type f -exec ls -l {} \;
-rw-rw-r-- 1 lkmao lkmao 0 6月  14 18:14 ./hello2
lkmao@ubuntu:/big/work/shell$

如你所见,find命令非常有用。你只需通过一点练习就可以很好地掌握它。无论如何,这点练习是完全值得的,所以请使用find命令来进行实验。

小结 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pandas---缺失值的处理

1. 处理缺失值 判断数据中是否包含NaN: pd.isnull(df);pd.notnull(df) 存在缺失值nan: 删除存在缺失值的:dropna(axisrows) 不会修改原数据,需要接受返回值; 替换缺失值:fillna(value, inplaceTrue) value:替换成的值&#…

基于STM32的四旋翼无人机项目(一):基础知识篇

前言:本篇博客为飞控专栏的第一篇系统性概述文章,将对飞控系统进行详细讲解介绍。考虑到飞控项目具有一定工程复杂度,所以作者将整个项目进行分章节教学与讲解,希望可以给读者朋友带来更好地学习体验。项目将以 C-Quad 四轴无人机…

SpringBoot 中使用 JWT 案例分享详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

大模型LLM领域,有哪些可以作为学术研究方向?

清湛人工智能研究院 2023-05-31 09:23 发表于江苏 编者:本文转载了清华大学计算机系刘知远教授对大模型的一些思索,以飨读者。 刘知远 CCF 高级会员,CCCF 前编委。清华大学计算机系副教授、博士生导师。已在ACL、IJCAI、AAAI等人工智能领域…

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于GRU-AdaBoost门…

单品GMV破千万,这些品类正在抖音热卖

优势品类及核心产品能更好触达消费者,以较低的成本让用户感知品牌,塑造品牌力。 抖音作为品牌最核心的线上渠道之一,该如何找到平台优势品类?制定品牌营销策略?有效提升产品销量呢? 近期,新抖上…

【CesiumJS入门】(4)加载3D Tiles并获取tileset

前言 本次,我们将写一个函数来加载3D Tiles数据, 3D Tiles数据的文档:CesiumGS/3d-tiles: Specification for streaming massive heterogeneous 3D geospatial datasets (github.com) 同时我们将获取加载成功后的tileset数据集(有…

Python 中错误 ImportError: No Module Named Sklearn

在 Python 中,sklearn 被用作机器学习工具,用于在回归、集群等方面创建程序。很多时候,导入它会抛出错误—— No module named sklearn。 这意味着由于安装错误、无效的 Python 或 pip 版本或其他问题,系统无法找到它。 Python中错误ImportError: No module named sklearn…

基于Java营业厅宽带系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

Karl Guttag评Vision Pro:比Quest Pro做了更多正确选择

上周苹果正式发布Vision Pro,尽管要到明年才发售,但光学领域的专业博主Karl Guttag也发表了自己的看法。他提到:目前受邀体验的媒体中要不是苹果粉丝、要不就是对AR、VR了解比较少,没有我看到“批判性思维”或太多对技术分析的内容…

MySQL常用操作(一)

创建表 create table user(id int unsigned primary key not null auto_increment,name varchar(50) unique not null,age tinyint not null,sex enum(M, W) not null )engineINNODB default charsetutf8;# 查看创建表语句 show create table user两种插入方式比较 # 方式1 i…

加速千行百业转型,华为如何为智能世界构建感知底座

导读:感知正成为行业数字化的新引擎。 我们正在迈进一个万物感知的时代。 日常生活中,感知已经无处不在。小到智能家居的控制系统,大到智慧城市虚实联动的数字孪生,感知是一切智能化的前提,也是行业数字化转型的基础。…

如何恢复被隔离的u盘数据?2种恢复u盘隔离数据的方法

很多时候,我们可能会因为各种原因导致U盘数据丢失,比如误删、格式化等情况。但最近有一位朋友咨询小编关于U盘文件被隔离的问题,他在使用U盘时发现有些文件被隔离了,想知道如何恢复。其实,U盘文件被隔离可能是由于存在…

记录--为什么推荐用svg而不用icon?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用背景: 1.因为svg图标在任何设备下都可以高清显示,不会模糊。而icon会在显卡比较低的电脑上有显示模糊的情况 2.svg图标在页面render时 速度会比icon稍微快一点 3.实现小程序…

Hightopo 使用心得(3)- 吸附与锚点

吸附与锚点是 HT for Web 中两个比较重要的概念。这两个概念在执行交互和动画时会经常被用到。 吸附,顾名思义,是一个节点吸附到另一个节点上。就像船底的贝类一样,通过吸附到船身,在船移动的时候自己也会跟着移动;而…

研究显示,超过一半的安全领导者对保护应用程序机密缺乏信心

这可能会让人感到意外,但秘密管理已经成为AppSec房间里的大象。虽然像常见漏洞和暴露(cve)这样的安全漏洞经常成为网络安全领域的头条新闻,但秘密管理仍然是一个被忽视的问题,可能会对企业安全产生直接而有影响的后果。 《卫报》最近的一项研…

AUTOSAR通信篇 - CAN网络通信(四:CanSM)

文章目录 简述CAN网络状态机触发器PowerOnCanSM_InitCanSM_DeInitT_START_WAKEUP_SOURCET_STOP_WAKEUP_SOURCET_FULL_COM_MODE_REQUESTT_SILENT_COM_MODE_REQUESTT_NO_COM_MODE_REQUESTT_BUS_OFF 防护条件G_FULL_COM_MODE_REQUESTEDG_SILENT_COM_MODE_REQUESTED 作用E_PRE_NOCO…

Question Log

Question Log 提示:记录一下平常遇到的坑 Question Log(★ > ) Question LogⅠ、★ > 使用VsCode构建Unity开发环境1.环境配置2.遇到的相关问题★.The .NET Core SDK cannot be located: A valid dotnet installation …

【Flutter】Flutter 使用splashscreen包创建启动页面

文章目录 一、 前言二、 什么是启动页面和 splashscreen三、 如何安装和使用 splashscreen四、 详细的代码示例:使用 splashscreen 创建启动页面五、 总结 一、 前言 大家好,今天我们要聊一聊如何在 Flutter 中使用 splashscreen 包来创建一个漂亮的启动…

使用Fiddler模拟网络

Fiddler已经预置提供了模拟Modem速度的选项,其位置位于: Rules->Performances->Simulate Modem Speeds 果你想学习Fiddler抓包工具,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&#x…