find 命令行是一个强大的文件搜索工具,它可以在 Linux 系统中搜索文件和目录。它可以根据文件名、文件大小、文件权限、文件日期和其它特征来搜索文件。
find 命令行的语法如下:
find [path...] [expression]
其中,[path...] 是要搜索的路径,[expression] 是用于搜索的表达式。如果省略 [path...] 参数,则默认使用当前目录作为搜索路径。
find 命令行可用于执行多种不同的操作:
-name file : 查找名字为 file 的文件 -size n : 查找大小为 n 的文件 -user user : 查找属于 user 用户的文件 -group group : 查找属于 group 用户组的文件 -mtime n : 查找最近 n 天内修改过的文件 -exec command {} \; : 将 command 命令应用到匹配到的所有文件上
此外,还可使用 -o 选项将多个条件拼接在一起:
find /home/user -name "*.txt" -o -name "*.log"
上面命令会在 /home/user 目录中查找后缀名为 .txt 或 .log 的文件。
此外,还可使用 -print 选项将匹配到的文件清单显示出来:
find /home/user -name "*.txt" -print
上面命令会在 /home/user 目录中查找后缀名为 .txt 的文
来源:http://www.cn-dos.net/forum/viewthread.php?tid=21167&fpage=1&highlight=findstr
问题缘起于bsijl一篇关于findstr错误过滤的主题[1],当时因为无法找到原因,所以只能推测 /g 开关存在某些问题。
近日,因为编写一个debuger代码,再次使用了 findstr/g ,结果遇到了同样的问题[2]。经过仔细的测试[3]后,发现是 findstr
特殊的命令行分析机制所引起的问题。略述如下:
1、findstr不同于早期的find,它对参数的排列有一定的要求,即遵循开关(可省略)、字符串(使用/c开关时省略)、文件名(可通配、可多个、有输入流时需省略)的顺序。
2、开关可以使用引号,所以不能直接以与开关相同的关键字进行搜索;文件名含空格时必须用引号。
3、搜索关键字的情况和表现就比较复杂,分述如下:
3-1、无论是否使用开关/l或/r以及是否使用引号,关键字中的都会成为转义字符,所以将成为,"将使引号失去字符串界定作用;
3-2、搜索关键字可加或不加引号,当加引号时其中的可能会再次转义。使用开关/l和/r时的转义结果可能会不同:当使用/r时,所以""将成为单个,""将使关键字为空;当使用/l或均不使用时,""和""与单个等价。
3-3、如果关键字以单个结尾,且无引号,则不会被转义;
而 findstr/g出现的问题,应该与上述内容有关,但其内在机理仍无法透彻理解。不知各位有何高见?
[1]批处理删除XP输入法问题!请dos高手解决
http://www.cn-dos.net/forum/search.php?searchid=24472
[2]Test of findstr/v/g
Quote:
E:BatchTest>set > envar.out
E:BatchTest>findstr /v /g:envar.out envar.out
LOGONSERVER=Test
ProgramFiles=C:Program Files
E:BatchTest>findstr /v /i /g:envar.out
envar.out
LOGONSERVER=Test
[3]Test of findstr
CODE: [Copy to clipboard]
:: Test of findstr
:: Will Sort - 2006-06-10 - CMDWinXP
@echo off
cls&echo ---- "set>_tfs1.tmp & findstr /v
/g:_tfs1.tmp _tfs1.tmp"
set>_tfs1.tmp & findstr /v /g:_tfs1.tmp
_tfs1.tmp
pause
echo ---- "findstr /v /i /g:_tfs1.tmp _tfs1.tmp"
findstr /v /i /g:_tfs1.tmp _tfs1.tmp
pause
echo ---- "sort /r _tfs1.tmp > _tfs2.tmp &
findstr /v /g:_tfs1.tmp _tfs2.tmp"
sort /r _tfs1.tmp > _tfs2.tmp & findstr /v
/g:_tfs1.tmp _tfs2.tmp
pause
echo ---- "set|findstr /v /g:_tfs1.tmp"
set|findstr /v /g:_tfs1.tmp
pause
cls&echo ---- "dir C: /w > _tfs2.tmp & findstr
/v /g:_tfs2.tmp _tfs2.tmp"
dir C: /w > _tfs2.tmp & findstr /v /g:_tfs2.tmp
_tfs2.tmp
pause
echo ---- "echo : > _tfs2.tmp & findstr /v
/g:_tfs2.tmp _tfs2.tmp"
echo : > _tfs2.tmp & findstr /v /g:_tfs2.tmp
_tfs2.tmp
pause
cls&echo ---- "findstr /g:_tfs1.tmp
_tfs1.tmp>_tfs2.tmp & fc _tfs1.tmp _tfs2.tmp"
findstr /g:_tfs1.tmp _tfs1.tmp>_tfs2.tmp & fc
_tfs1.tmp _tfs2.tmp
pause
cls&echo ---- "set|findstr /r " ""
set|findstr /r " "
pause
echo ---- "set|findstr /l " ""
set|findstr /l " "
pause
cls&echo ---- "echo _tfs1_tmp > _tfs1.tmp &
findstr "/l" "_tfs1.tmp" "_tfs1.tmp""
echo _tfs1_tmp >> _tfs1.tmp & findstr
"_tfs1.tmp" "_tfs1.tmp"
pause
del _tfs?.tmp
[ Last edited by willsort on 2006-6-11 at 18:38 ]
Climbing
金牌会员
『第 2 楼』:
在我的XP上这个结果如何解释?
d:work>findstr /v /g:envar.out envar.out
FINDSTR: 搜索字符串太长。
d:work>findstr /v /g:envar.out envar.out
FINDSTR: 搜索字符串太长。
d:work>findstr /v /g:envar.out
FINDSTR: 搜索字符串太长。
无奈何
版主
『第 3 楼』:
在我的 XP 下和 willsort 兄 3、的描述相同。这个恼人的结果不知道能不能确定是
FINDSTR 的 BUG ,请朋友们多试一下其它系统的情况。看来关键字中含有 “”
字符应该多加小心了。
3742668
版主
『第 4 楼』:
唔,似乎只有当后面的字符为非字母和非数字的时候才会出错。感觉microsoft准备把findstr做成cmd下的正则表达式工具似的,但是又没有考虑到与其他参数之间的兼容性,导致最后的结果是画虎不成反类犬。
另外在某些时候,findstr的查找字符串中包含中文时,需要加上/i参数才能避免错误,具体环境以及代码已忘,或许findstr除了正则表达式方面的bug外还存在unicode与ascii转换的bug。
willsort
版主
『第 5 楼』:
Re Ups:
另外一个问题:
因为开关也允许引号,所以无法以 "/l" 或 "/r"
等与开关相同的文本串作为关键字匹配,下面的句式将会出错:
echo /l /r > test
findstr /l "/r" test
不过,可以使用开关 /c 来强制指定关键字:
findstr /l /c:"/r" test
findstr /l /c:/r test
还有一个方法,就是上文提到的 了:
findstr /l /r test
此外,这个 还可以让我们的关键字中包含引号:
echo /l /r >test
echo "/r" >> test
findstr /l "/r" test
最后,修订和增补顶楼3-2中的一些描述:
3-2、开关/r和开关/l相同,其后的关键字均可使用或不使用引号;使用引号时:
3-2-1、""和""等价于引号和其后各个串所各自代表的多个关键字;
3-2-2、""和""等价于引号加组成的关键字和其他多个关键字;
3-2-3、""等价于引号加组成的关键字和其他多个关键字;
3-2-4、" ",""," ","
",""," "等价于空;
3-2-5、" ",""等价于一个;
3-2-6、" ",""等价于两个;
3-2-7、" "等价于三个;
3-2-8、" "等价于四个;
以上数据由以下方法测得,测试文件见[1][2],当不使用/r开关与使用开关/l相同,;
type test1.txt | findstr /r "test_key"
test2.xt
[1] Test text of findstr - "test1.txt"
Quote:
/l /r
"/l"
" test1
" test1
" test1
" test1
" test1
test1
test1
test1
test1
[2] Test text of findstr - "test2.txt"
Quote:
" test2
" test2
" test2
" test2
" test2
test2
test2
test2
test2
[ Last edited by willsort on 2006-6-11 at 18:25 ]
220110
版主
『第 6 楼』:
Quote:
3-2、开关/r和开关/l相同,其后的关键字均可使用或不使用引号;使用引号时:
3-2-1、""和""等价于引号和其后各个串所各自代表的多个关键字;
3-2-2、""和""等价于引号加组成的关键字和其他多个关键字;
3-2-3、""等价于引号加组成的关键字和其他多个关键字;
3-2-4、" ",""," ","
",""," "等价于空;
3-2-5、" ",""等价于一个;
3-2-6、" ",""等价于两个;
3-2-7、" "等价于三个;
3-2-8、" "等价于四个;
我早前也发现这规律存在路径名上,只是没深入研究,没敢贴上来.
我是从"dir .", " dir .." 开始,大家不妨测试下.
willsort
版主
状态 离线 『第 7 楼』:
Re 220110:
UNC 路径名中 的解析与 findstr
关键字是不同的,它只有界定目录的作用,而没有转义字符的作用。
另外,findstr /v ^%var%$ test.txt 语句中,如果test.txt最后一行就是要匹配的%var%,且该行不为空,则不能过滤最后一行的内容,似乎是分行标志识别出了错
目前,Kubernetes 支持在多种环境下的安装,包括本地主机(Fedora)、云服务(Google GAE、AWS 等)。然而最快速体验 Kubernetes...
StatefulSet基础本教程介绍了如何使用StatefulSet来管理应用。演示了如何创建、删除、扩容/缩容和更新StatefulSet的Pod。在开始...
Docker pull 命令Docker 命令大全docker pull : 从镜像仓库中拉取或者更新指定镜像语法docker pull [OPTIONS] NAME[:TAG|@DIGEST...
Docker支持以下的CentOS版本:CentOS 7 (64-bit)CentOS 6.5 (64-bit)或更高的版本前提条件目前,CentOS 仅发行版本中的内核支持 ...
方法一、通过 Dockerfile构建创建Dockerfile首先,创建目录tomcat,用于存放后面的相关东西。@:~$ mkdir -p ~/tomcat/webapps ~/t...
5 Control types这个例子,对view model没有什么特殊的展示,只是展示如何绑定到各种元素上(例如,select, radio button等...
建议第一步,看完uni-app官网的首页介绍。建议第二步,通过快速上手,亲身体验下uni-app。建议第三步,看完《 uni-app官方教程》...
如下是使用uni-app的开源案例,我们相信还有更多优秀案例,没有被我们采集到,欢迎大家到项目案例征集提交。Hello uni-app:展示...
你需要在 info.plist 中添加NSLocationWhenInUseUsageDescription键来定位,当你用react-native init来创建一个项目时,默认情况...