find是用来在文件系统上查找复合条件的文件
find命令有非常强大的灵活性,可以指定丰富的搜索条件(如文件权限、属主、属组、文件类型、日期和大小等)来定位系统中的文件和目录,同时还支持对对搜索的结果进行命令操作
find命令格式:
find [paths(查找路径)] [expression(查找条件)] [actions(处理动作)] 2>/dev/null
find命令接受一个或多个路径(paths)作为搜索范围,并在该路径下递归搜索。
即检索完指定目录后,还会对该目录下的子目录进行检索,直至检索完所有层级下文件
默认情况下(不带任何搜索条件),find命令会返回指定目录下的 所有文件 ,所以通常通过特定的 expression 对结果进行筛选
find默认命令的 action 是 print ,将所有检索结果打印至标准输出
可以通过自定义 action ,让 find 命令对搜索到的结果执行特定的操作
由于权限等问题,可能查找报错,建议最后将报错重定向 2>/dev/null ,避免显示大量无用信息
参数
-name "文件名称": 区分大小写,支持使用glob 通配符 * ? [] [^]
-iname "文件名称":不区分字母大小写
-path "/path/name" : 匹配某个文件或目录的完整路径,而不仅仅是匹配文件名
示例:
# 查找 /usr 目录下所有文件名以 .txt 结尾的文件
find /usr -name '*.txt'
#查找 /usr 目录下所有文件名刚好为 4 个字符的文件
find /usr -name '????'
#查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src
find /usr -path '*/src/*.txt'
-type 类型
f:普通文件
d:目录文件
l:符号链接文件
s:套接字文件
b:块设备文件
c:字符设备文件
p:管道文件
# 检索 /usr 下所有文件名以 python 开头的目录
find /usr -type d -name 'python*'
-size [+|-] #Unit
#Unit常用单位:K M G
#+ 或 - 符号表示大于或小于当前条件
#Unit : (#-1,#]
-#Unit : [0,#-1] : 小于指定大小文件
+#Unix : (#,) : 大于指定大小文件
# 查找大于100M的文件
find / -size +100M
Linux 系统中,与文件相关联的时间参数有以下三种:
修改时间(Modification time):最后一次文件内容有过更改的时间点
访问时间(Access time):最后一次文件有被读取过的时间点
变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改)
与此对应的是 find 命令中的 -mtime,-atime 和 -ctime 三个选项
以"天"为单位
-atime [+|-]#
#: [#,#+1) : 这里的#表示#天之前的“一天之内”被访问过的文件
+#: [#+1,OO]: 列出在#天之前(不包含#天本身)被访问过的文件
-#: [0,#) : 列出在#天之内(包含#天本身)被访问过的文件
-mtime [+|-]
-ctime [+|-]
以"分钟"为单位
-amin
-mmin
-cmin
# 查找两天之前的一天内被访问的文件(距离现在的前48 ~ 72 小时之间)
find -atime 2
# 查找距离此时2天内被访问的文件(距离现在前48小时之内)
find -atime -2
# 两天之前,不包括两天之前的一天的被访问的文件(离此时72小时之前)
find -atime +2
-user username :查找属主为指定用户的文件
-group groupname :查找指定属组的文件
-uid userid:查找属主为指定uid号的文件
-gid groupid 查找属组为指定gid号的文件
-nouser :查找没有属主的文件
-nogroup : 查找没有属组的文件
# 查找/var目录下属主为root,且属组为mail的所有文件或目录、
find /var -user root -a -group mail
-perm [+|-] Mode
Mode : 精确权限匹配
+Mode :任何一类(u,g,o)对象的权限中只要有一位匹配即可
-Mode :完全包含此mode时才可以匹配,每一类对象都必须同时拥有为其指定的权限标准
# 查找在/tmp目录下权限是755的文件
find /tmp -perm 755
# 表示必须所有类别用户都满足有写权限
find /tmp -perm -222
# 表示只要有一类用户(属主,属组,其他)的匹配写权限就行
find /tmp -perm +222
与 -a
或 -o
非 -not
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
# 查找/etc目录下最近一周内其内容修改过,且属主不为root,也不是hadoop的文件或目录
find /etc -mtime -7 -not \( -user root -o -user hadoop \)
# 查找5分钟内或50分钟前被修改 ,并且 类型为文件的 所有文件
find / '(' -mmin -5 -o -mtime +50 ')' -a -type f
-print :默认的处理动作,显示至屏幕
-ls :类似于对查找到的文件执行 "ls -l"命令
-delete :删除查找到的文件
-fls /path/to/somefile :查找到的所有文件的长格式信息保存至指定文件中
# 其中的大括号{}作为检索到的文件的 占位符 ,用于引用查找到的文件名称自身
# 而分号( ;)作为命令结束的标志, 需要转义 , 也可以用 + 号表示
# -exec command {} \; 等同于 -exec command {} +
-ok command {} \;
对查找到的每个文件执行由command指定的命令
对于每个文件执行命令之前,都会交互式要求用户确认
-exec command {} \;
对查找到的每个文件执行由command指定的命令
# 浏览所有 1G 以上大小的文件的详细信息
find / -type file -size +1G -ls
# 删除 home 目录下所有的空目录:
find ~ -type d -empty -delete
# 删除/var下空文件
find /var -size 0 -type f -exec rm -rf {} \;
# 删除海量文件,rm会很慢甚至卡死
# 一般用 find 或 rsync 来删除大量文件
# rsync 速度快于 find
# 可以用 time 测试速度
#time find ./ -type f -delete
find ./ -type f -delete
# test time find ./ -type f -exec rm {} \;
find ./ -type f -exec rm {} \;
# 使用rsync进行删除
# 首先建立空文件夹blanktest
# time rsync -a --delete blanktest/ test/
rsync -a --delete blanktest/ test/
注意:
find 传递查找到文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的指令
有些命令不能接受过多参数,此时命令执行可能会失败,另一种方式可规避此问题find | xargs command
xargs 介绍
xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
在指定路径下查找含有指定字符串的文件
# 将find查找的所有文件 作为参数传递给 grep进行过滤
find /path | xargs grep -ri "string"
# 查找大于200M的文件,并显示具体大小
find / -type f -size +200M 2>/dev/null | xargs du -sh
# 查找大于200M的文件,并显示详细信息
find / -type f -size +200M 2>/dev/null | xargs ls -l
# 查找系统中 最大的 10 个文件
find / -type f -exec du -sh {} + 2>/dev/null | sort -rh | head -n 10
# 查找 /etc 下 文件内包含 "password" 的文件
find /etc | xargs grep -ri "password"
# 遍历查找所有目录下的 Inode数量
for i in /*; do echo $i; find $i 2>/dev/null | wc -l; done
# 删除大与100M,时间在7天前的文件
find /test -size +100M -mtime +7 -delete
有几种方法:first_or_create_by、find_or_create_by等,它们的工作原理是:与数据库对话以尝试找到我们想要的东西如果我们找不到,就自己做保存到数据库显然,并发调用这些方法可能会使两个线程都找不到它们想要的东西,并且在第3步中一个线程会意外失败。似乎更好的解决方案是,创建或查找即:提前在您的数据库中创建合理的唯一性约束。如果你想保存一些东西,就保存它如果有效,那就太好了。如果它因为RecordNotUnique异常而无法工作,它已经存在,太好了,加载它那么在什么情况下我想使用Rails内置的东西而不是我自己的(看起来更可靠)create_or_find?
我有一些模型需要在它们上面放置自定义查找条件。例如,如果我有一个联系人模型,每次调用Contact.find时,我都想限制返回的联系人只属于正在使用的帐户。我通过Google找到了这个(我对其进行了一些自定义):defself.find(*args)with_scope(:find=>{:conditions=>"account_id=#{$account.id}"})dosuper(*args)endend这很好用,除了少数情况下account_id不明确,所以我将其调整为:defself.find(*args)with_scope(:find=>{:conditions=>"#{s
我有一个任务列表(名称、starts_at),我试图在每日View中显示它们(就像iCal)。deftodays_tasks(day)Task.find(:all,:conditions=>["starts_atbetween?and?",day.beginning,day.ending]end我不知道如何将Time.now(例如“2009-04-1210:00:00”)动态转换为一天的开始(和结束),以便进行比较。 最佳答案 deftodays_tasks(now=Time.now)Task.find(:all,:conditio
我有一个哈希条目数组,并希望根据传递给函数的参数进行过滤。如果散列中有三个值,A、B和C,我想做类似的事情:data=[{A:'a1',B:'b1',C:'c1'},{A:'a1',B:'b2',C:'c1'},{A:'a1',B:'b2',C:'c2'},{A:'a2',B:'b1',C:'c1'},{A:'a2',B:'b2',C:'c1'}]data.find_all{|d|d[:A].include?params[:A]}.find_all{|d|d[:B].include?params[:B]}.find_all{|d|d[:C].include?params[:C]}找到所
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
我正在使用来自learn-rails.com的“学习RubyOnRails”pdf书。我在第13章“配置”。我们应该在哪里执行命令:“railsgeneratefigaro:install”在第12章中,我们安装了figarogem:“我们已经在Gemfile中安装了figarogem并运行bundleinstall。”当我运行该命令时,我得到:“找不到生成器figaro:install。”我开始搜索类似的问题,我确实在这里找到了这个问题:railsgenerate-"Couldnotfindgenerator"他们被建议在命令中也包含“迁移”。我将它包含在我的命令中并让它做某事,但我
我的问题与HowdoIresolve"Cannotfindmodule"errorusingNode.js?非常相似,但我无法使用给出的答案中提供的信息解决我的问题。我尝试运行UNCSSgrunt插件,但是当我尝试安装它时(npminstallgrunt-uncss--save-dev),我收到以下错误:$npminstallgrunt-uncss--save-devmodule.js:340throwerr;^Error:Cannotfindmodule'abbrev'atFunction.Module._resolveFilename(module.js:338:15)atFunc
我需要按照作为搜索参数传入的准确顺序查找记录。例如,我有一个字符串:item_list="23,12,54,45"通过以下查询,我按“item_list”的asc顺序获取记录-“12,23,45,54”。Inventory.find(item_list.split(","))如何修改上述查询,使其以与“item_list”相同的顺序返回记录。谢谢。 最佳答案 试试这个,虽然它可能只适用于MySQL:Inventory.where("idIN(#{item_list})").order("find_in_set(id,'#{item_
我对此很陌生,我该如何解决这个问题?$rakeCouldnotfindRedCloth-4.2.9inanyofthesourcesRun`bundleinstall`toinstallmissinggems. 最佳答案 您没有RedCloth安装gem就是这样。如果您使用的是Bundlergem,我想您可以输入bundleinstall安装它,否则你可以通过geminstallRedCloth手动安装它. 关于ruby:CouldnotfindRedCloth-4.2.9,我们在Sta