-
2020-12-04 11:03:50
find / | xargs grep function 查找系统根目录下面的所有文件的内容中包含有function字符串的文件列表。
find .|xargs grep x
find . -exec grep x{} \;find / -name "httpd.conf"
find / -name "rsync"
为什么会这样能,因为通道命令符是把上一部的结果传递给下一步来处理,在 find . |grep x中虽然看似和find .|xargs grep x差不多,但是实际上还是有区别的。应为find .得到的结果是一串文件名集合,如果直接传递给grep的话,grep会把这些文件名看作一些无意义的字符串来处理。但是传递给xargs,他会把他当作一个有意义的文件来处理。
Linux find命令详解
由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
一、find 命令格式
1、find命令的一般形式为;find pathname -options [-print -exec -ok ...]
2、find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。3、find命令选项
-name
按照文件名查找文件。
-perm
按照文件权限来查找文件。
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user
按照文件属主来查找文件。
-group
按照文件所属的组来查找文件。
-mtime -n +n
按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。
-type
查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。另外,下面三个的区别:
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变文件状态的文件
-ctime n
查找系统中最后n*24小时被改变文件状态的文件
-mmin n
查找系统中最后N分钟被改变文件数据的文件
-mtime n
查找系统中最后n*24小时被改变文件数据的文件4、使用exec或ok来执行shell命令
使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。
例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中
# find . -type f -exec ls -l { } \;
-rw-r--r-- 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r--r-- 1 root root 12959 2003-02-25 ./conf/magic
-rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。
在/logs目录中查找更改时间在5日以前的文件并删除它们:$ find logs -type f -mtime +5 -exec rm { } \;
记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。
在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
$ find . -name "*.conf" -mtime +5 -ok rm { } \;
< rm ... ./conf/httpd.conf > ? n按y键删除文件,按n键不删除。
任何形式的命令都可以在-exec选项中使用。
在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。
# find /etc -name "passwd*" -exec grep "sam" { } \;
sam:x:501:501::/usr/sam:/bin/bash二、find命令的例子;
1、查找当前用户主目录下的所有文件:
下面两种方法都可以使用$ find $HOME -print
$ find ~ -print
2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;$ find . -type f -perm 644 -exec ls -l { } \;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
$ find / -type f -size 0 -exec ls -l { } \;
4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
$ find /var/logs -type f -mtime +7 -ok rm { } \;
5、为了查找系统中所有属于root组的文件;
$find . -group root -exec ls -l { } \;
-rw-r--r-- 1 root root 595 10月 31 01:09 ./fie16、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。
该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令$ find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok
rm { } \;
< rm ... ./admin.log001 > ? n
< rm ... ./admin.log002 > ? n
< rm ... ./admin.log042 > ? n
< rm ... ./admin.log942 > ? n7、为了查找当前文件系统中的所有目录并排序;
$ find . -type d | sort
8、为了查找系统中所有的rmt磁带设备;
$ find /dev/rmt -print
三、xargs
xargs - build and execute command lines from standard input在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text\
......在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
上面这个执行太慢,我改成在当前目录下查找
#find . -name "file*" -print | xargs echo "" > /temp/core.log
# cat /temp/core.log
./file6在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
# ls -l
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf用grep命令在所有的普通文件中搜索hostname这个词:
# find . -type f -print | xargs grep "hostname"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:
# find . -name \* -type f -print | xargs grep "hostnames"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
四、find 命令的参数
下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册1、使用name选项
文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。
$ find ~ -name "*.txt" -print
想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用:
$ find . -name "*.txt" -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
$ find . -name "[A-Z]*" -print
想要在/etc目录中查找文件名以host开头的文件,可以用:
$ find /etc -name "host*" -print
想要查找$HOME目录中的文件,可以用:
$ find ~ -name "*" -print 或find . -print
要想让系统高负荷运行,就从根目录开始查找所有的文件。
$ find / -name "*" -print
如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件:
$find . -name "[a-z][a-z][0--9][0--9].txt" -print
2、用perm选项
按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:
$ find . -perm 755 -print
还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666
# ls -l
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find . -perm 006
# find . -perm -006
./sam
./httpd1.conf
./temp-perm mode:文件许可正好符合mode
-perm +mode:文件许可部分符合mode
-perm -mode: 文件许可完全符合mode
3、忽略某个目录
如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:
$ find /apps -path "/apps/bin" -prune -o -print
4、使用find查找文件的时候怎么避开某个文件目录比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件
find /usr/sam -path "/usr/sam/dir1" -prune -o -print
find [-path ..] [expression] 在路径列表的后面的是表达式
-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o
-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path "/usr/sam" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "/usr/sam" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。这个表达式组合特例可以用伪码写为
if -path "/usr/sam" then
-prune
else
-print避开多个文件夹
find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print
圆括号表示表达式的结合。
\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
查找某一确定文件,-name等选项加在-o 之后
#find /usr/sam \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "temp" -print
5、使用user和nouser选项按文件属主查找文件,如在$HOME目录中查找文件属主为sam的文件,可以用:
$ find ~ -user sam -print
在/etc目录下查找文件属主为uucp的文件:
$ find /etc -user uucp -print
为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。
例如,希望在/home目录下查找所有的这类文件,可以用:
$ find /home -nouser -print
6、使用group和nogroup选项就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:
$ find /apps -group gem -print
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件
$ find / -nogroup-print
7、按照更改时间或访问时间等查找文件如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
$ find / -mtime -5 -print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
$ find /var/adm -mtime +3 -print
8、查找比某个文件新或旧的文件
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
查找更改时间比文件sam新但比文件temp旧的文件:
例:有两个文件
-rw-r--r-- 1 sam adm 0 10月 31 01:07 fiel
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find -newer httpd1.conf ! -newer temp -ls
1077669 0 -rwxrwxr-x 2 sam adm 0 10月 31 01:01 ./httpd.conf
1077671 4 -rw-rw-rw- 1 root root 2792 10月 31 20:19 ./temp
1077673 0 -rw-r--r-- 1 sam adm 0 10月 31 01:07 ./fiel查找更改时间在比temp文件新的文件:
$ find . -newer temp -print
9、使用type选项在/etc目录下查找所有的目录,可以用:
$ find /etc -type d -print
在当前目录下查找除目录以外的所有类型的文件,可以用:
$ find . ! -type d -print
在/etc目录下查找所有的符号链接文件,可以用
$ find /etc -type l -print
10、使用size选项可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。
在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。
在当前目录下查找文件长度大于1 M字节的文件:$ find . -size +1000000c -print
在/home/apache目录下查找文件长度恰好为100字节的文件:
$ find /home/apache -size 100c -print
在当前目录下查找长度超过10块的文件(一块等于512字节):
$ find . -size +10 -print
11、使用depth选项
在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。
它将首先匹配所有的文件然后再进入子目录中查找。
$ find / -name "CON.FILE" -depth -print
12、使用mount选项在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:
$ find . -name "*.XC" -mount -print
扫描下方公众号二维码,或者关注公众号: 猿有一技,回复关键字:linux, 即可免费无套路获取学习资料。
更多相关内容 -
find命令,详细
2021-03-05 11:27:43find命令,查找文件和目录 find查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令。查找可以在各种条件下使用,您可以通过权限,用户,组,...find命令,查找文件和目录
find查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令。查找可以在各种条件下使用,您可以通过权限,用户,组,文件类型,日期,大小等可能的条件查找文件。
语法:
find pathname -option [-print ] [ -exec | -ok command ] {} ;
find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。第一部分:查找名称查找文件的基本查找命令
-name filename //查找名为filename的文件。
-iname filename //与-name相同,查找名为filename的文件,但忽略大小写,即不区分大小写。
-type b/d/c/p/l/f //按照文件类型查找,查是块设备、目录、字符设备、管道、符号链接、普通文件。 块设备:随机读取,例如硬盘 字符设备:顺序读取,例如键盘、鼠标
-type查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s -socket文件
1.使用当前目录中的名称查找文件
2.在指定目录下查找文件
3.使用名称和忽略大小写查找文件
4.使用名称查找目录
5.使用名称查找PHP文件
6.查找目录中的所有PHP文件
7.查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称
说明:这里要注意{}的使用:替代查找到的文件
8.查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
第二部分:根据他们的权限查找文件
-perm //按执行权限来查找
-empty //查找长度为零(即空文件)的文件 r 4 w 2 x 1
1.查找权限为777的所有文件
2.查找没有777权限的文件
说明: !表示否定,即取反
3.查找权限设置为644的所有SGID位文件。
# find / -perm 2644
4.查找权限为551的所有Sticky Bit设置文件。
# find / -perm 1551
5.查找所有可执行文件。
# find / -perm /a=r
6.找到777个权限和Chmod到644的文件
7.找到一个名为test.c的文件并将其删除
# find -type f -name test.c -exec rm -f {} ;
8.查找和删除多个文件,如.mp3或.txt
# find -type f -name “.txt" -exec rm -f {} ;
# find -type f -name ".mp3” -exec rm -f {} ;
9.在特定路径下查找所有空文件。
# find /tmp -type f -empty
10.在特定路径下查找所有空目录
# find /tmp -type d -empty
12. 查找空文件或空目录
# find ./ -empty
13.查找空文件并删除
# find ./ -empty -name test.a -print -delete
14.要查找所有隐藏的文件,请使用以下命令。第三部分:基于所有者和组的搜索文件
-user username #按文件属主来查找
-group groupname #按组来查找
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存(孤儿文件 没有所有者的文件)
1.查找所有者root的、名为test.c的文件。
# find / -user root -name test.c
2.查找/ home目录下属于Group Developer的所有文件。
# find / -group developer
3.查找无效属组的所有文件
# find / -nogroup
4.查找无效属主的所有文件
# find / -nouser第四部分:根据日期和时间查找文件和目录
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
注:我们可以使用stat命令来查看一个文件的时间信息。- 在/root下查找文件更新日是在距现在时刻二天以内的文件
# find /root/ -mtime -2 - 在/root下查找文件更新日是在距现在时刻二天以上的文件
# find /root/ -mtime +2
3.在/root下查找文件更新日是在距现在时刻一天以上二天以内的文件
# find /root/ -mtime 2
注:-atime、-ctime与-mtime用法类似,可以自行查看man帮助。
4.查找文件更新日是在距现在时刻二分钟以内的文件
#find ./ -mmin -2
5.查找文件更新日是在距现在时刻二分钟以上的文件
#find ./ -mmin +2
6.查找文件更新日是在距现在时刻一分钟以上二分钟以内的文件
#find ./ -mmin 2
注:-amin、cmin与-mmin用法类似,可以自行查看man帮助。
7.查找文件更新时间比文件abc的内容更新时间新的文件
#find ./ -newer abc
查找更改时间比文件file1新但比文件file2旧的文件。-newer file1 ! file2
8.查找文件访问时间比文件abc的内容更新时间新的文件
#find ./ -anewer abc
9.查找所有被修改超过50天以及少于100天的文件。
# find / -mtime +50 -mtime -100
第五部分:根据大小查找文件
-size [+/-]n
按照文件大小查询文件,+n表示文件大小大于n,-n表示文件大小小于n。常用单位:k, M, G
# find /tmp -size 2M //查找在/tmp 目录下等于2M的文件
# find /tmp -size +2M //查找在/tmp 目录下大于2M的文件
# find /tmp -size -2M //查找在/tmp 目录下小于2M的文件
# find /tmp -size +50M -size -100M //找到大于50MB且小于100MB的所有文件。
#find / -type f -name “.mp3” -size +10M -exec rm {} ; //查找超过10MB的所有.mp3文件,并使用一个命令删除它们。
1.find 命令默认会递归查找整个目录树,而这非常消耗时间和资源。好在目录查找的深度可以手动指定。例如我们只想查找一到两层以内的子目录,可以通过 maxdepth 选项来指定。
# find ./test -maxdepth 2 -name ".php"
# find ./test -maxdepth 1 -name ".php"
第二个示例中指定了maxdepth 为1,表明最多只查找一层内的子目录,也就是只查找当前文件夹。
当我们只想在当前目录下查找,而不是查找整个目录树的时候,这个选项会特别有用。
与maxdepth 选项相似,还有一个选项叫做 mindepth ,正如名字所表示的那样,它会至少到达第 N 层子目录后才开始查找文件。
2.反向查找
除了查找满足条件的文件之外,我们还可以查找不满足条件的所有文件。当我们知道要在查找中排除哪些文件时,这个选项就能发挥作用了。
$ find ./test -not -name “.php”
./test
./test/abc.txt
./test/subdir
在上面的示例中我们找到了所有扩展名不是 php 的文件和文件夹。我们也可以使用感叹号 ! 来代替 -not。
find ./test ! -name “.php”
结合多个查找条件
我们可以同时使用多个查找条件来指定文件名并排除某些文件。
$ find ./test -name ‘abc’ ! -name ‘.php’
./test/abc.txt
./test/abc
上面的命令查找所有以abc 开头并且不含 .php 扩展名的文件。这个示例展现了 find 命令自带的查找表达式是多么的强大。
3.OR 操作符
当我们使用多个查找条件时, find 命令会将它们通过 AND 操作符(-a)结合起来,也就是说,只有满足所有条件的文件才会被列出。不过,如果我们需要进行基于 OR 运算的查找时,可以加上 -o开关。
$ find -name ‘.php’ -o -name ‘*.txt’
./abc.txt
./subdir/how.php
./abc.php
./cool.php
上面的命令查找所有以 .php 结尾或者以 .txt 结尾的文件。
4.-prune:不在当前指定目录中查找
例如:已知在/etc,/etc/pam.d以及/usr/bin目录下都有一个名为passwd的文件,我们看一下-prune的作用
# find / -name passwd //在根目录及其子目录下查找名为passwd的文件
./usr/bin/passwd
./etc/passwd
./etc/pam.d/passwd
# find / -path /etc -prune -o -name passwd -print //在根目录及其子目录(除了/etc目录及其子目录)下查找名为passwd的文件。
./usr/bin/passwd
# find / ( -path /usr/bin -o -path /etc ) -prune -o -name “passwd” -print //在根目录及其子目录(除了/usr/bin目录及其子目录;/etc目录及其子目录)下查找名为passwd的文件。由于命令行不能直接识别圆括号,因此要用转义字符\,在和前后都要有空格。 - 在/root下查找文件更新日是在距现在时刻二天以内的文件
-
BeautifulSoup中find和find_all的使用
2018-10-17 13:20:48爬虫利器BeautifulSoup中find和find_all的使用方法 二话不说,先上段HTML例子 &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;title&amp;gt; index &...爬虫利器BeautifulSoup中find和find_all的使用方法
- 二话不说,先上段HTML例子
<html> <head> <title> index </title> </head> <body> <div> <ul> <li id="flask"class="item-0"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-inactie"><a href="link3.html">third item</a></li> <li class="item-1"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a> </ul> </div> <li> hello world </li> </body> </html>
使用BeautifulSoup前需要先构建BeautifulSoup实例
# 构建beautifulsoup实例 soup = BeautifulSoup(html,'lxml') # 第一个参数是要匹配的内容 # 第二个参数是beautifulsoup要采用的模块,即规则
- 需要注意的是,导入对的模块需要事先安装,此处导入的LXML事先已经安装。可以导入的模块可通过查询BeautifulSoup的文档查看
接下来是find和find_all的介绍
1. find
只返回第一个匹配到的对象
语法:
find(name, attrs, recursive, text, **wargs)
# recursive 递归的,循环的参数:
参数名 作用 name 查找标签 text 查找文本 attrs 基于attrs参数 例子:
# find查找一次 li = soup.find('li') print('find_li:',li) print('li.text(返回标签的内容):',li.text) print('li.attrs(返回标签的属性):',li.attrs) print('li.string(返回标签内容为字符串):',li.string)
运行结果:
find_li: <li class="item-0" id="flask"><a href="link1.html">first item</a></li> li.text(返回标签的内容): first item li.attrs(返回标签的属性): {'id': 'flask', 'class': ['item-0']} li.string(返回标签内容为字符串): first item
find也可以通过‘属性=值’的方法进行匹配
li = soup.find(id = 'flask') print(li,'\n')
<li class="item-0" id="flask"><a href="link1.html">first item</a></li>
需要注意的是,因为class是python的保留关键字,若要匹配标签内class的属性,需要特殊的方法,有以下两种:
- 在attrs属性用字典的方式进行参数传递
- BeautifulSoup自带的特别关键字class_
# 第一种:在attrs属性用字典进行传递参数 find_class = soup.find(attrs={'class':'item-1'}) print('findclass:',find_class,'\n') # 第二种:BeautifulSoup中的特别关键字参数class_ beautifulsoup_class_ = soup.find(class_ = 'item-1') print('BeautifulSoup_class_:',beautifulsoup_class_,'\n')
运行结果:
findclass: <li class="item-1"><a href="link2.html">second item</a></li> BeautifulSoup_class_: <li class="item-1"><a href="link2.html">second item</a></li>
2. find_all
返回所有匹配到的结果,区别于find(find只返回查找到的第一个结果)
语法:
find_all(name, attrs, recursive, text, limit, **kwargs)
参数名 作用 name 查找标签 text 查找文本 attrs 基于attrs参数 与find一样的语法
上代码
# find_all 查找所有 li_all = soup.find_all('li') for li_all in li_all: print('---') print('匹配到的li:',li_all) print('li的内容:',li_all.text) print('li的属性:',li_all.attrs)
运行结果:
--- 匹配到的li: <li class="item-0" id="flask"><a href="link1.html">first item</a></li> li的内容: first item li的属性: {'id': 'flask', 'class': ['item-0']} --- 匹配到的li: <li class="item-1"><a href="link2.html">second item</a></li> li的内容: second item li的属性: {'class': ['item-1']} --- 匹配到的li: <li cvlass="item-inactie"><a href="link3.html">third item</a></li> li的内容: third item li的属性: {'cvlass': 'item-inactie'} --- 匹配到的li: <li class="item-1"><a href="link4.html">fourth item</a></li> li的内容: fourth item li的属性: {'class': ['item-1']} --- 匹配到的li: <li class="item-0"><a href="link5.html">fifth item</a> </li> li的内容: fifth item
附上比较灵活的find_all查询方法:
# 最灵活的使用方式 li_quick = soup.find_all(attrs={'class':'item-1'}) for li_quick in li_quick: print('最灵活的查找方法:',li_quick)
运行结果:
最灵活的查找方法: <li class="item-1"><a href="link2.html">second item</a></li> 最灵活的查找方法: <li class="item-1"><a href="link4.html">fourth item</a></li>
完整代码:
# coding=utf8 # @Author= CaiJunxuan # @QQ=469590490 # @Wechat:15916454524 # beautifulsoup # 导入beautifulsoup模块 from bs4 import BeautifulSoup # HTML例子 html = ''' <html> <head> <title> index </title> </head> <body> <div> <ul> <li id="flask"class="item-0"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li cvlass="item-inactie"><a href="link3.html">third item</a></li> <li class="item-1"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a> </ul> </div> <li> hello world </li> </body> </html> ''' # 构建beautifulsoup实例 soup = BeautifulSoup(html,'lxml') # 第一个参数是要匹配的内容 # 第二个参数是beautifulsoup要采用的模块,即规则 # html.parser是python内置的结构匹配方法,但是效率不如lxml所以不常用 # lxml 采用lxml模块 # html5lib,该模块可以将内容转换成html5对象 # 若想要以上功能,就需要具备对应的模块,比如使用lxml就要安装lxml # 在bs4当中有很多种匹配方法,但常用有两种: # find查找一次 li = soup.find('li') print('find_li:',li) print('li.text(返回标签的内容):',li.text) print('li.attrs(返回标签的属性):',li.attrs) print('li.string(返回标签内容为字符串):',li.string) print(50*'*','\n') # find可以通过'属性 = 值'的方法进行select li = soup.find(id = 'flask') print(li,'\n') # 因为class是python的保留关键字,所以无法直接查找class这个关键字 # 有两种方法可以进行class属性查询 # 第一种:在attrs属性用字典进行传递参数 find_class = soup.find(attrs={'class':'item-1'}) print('findclass:',find_class,'\n') # 第二种:BeautifulSoup中的特别关键字参数class_ beautifulsoup_class_ = soup.find(class_ = 'item-1') print('BeautifulSoup_class_:',beautifulsoup_class_,'\n') # find_all 查找所有 li_all = soup.find_all('li') for li_all in li_all: print('---') print('匹配到的li:',li_all) print('li的内容:',li_all.text) print('li的属性:',li_all.attrs) # 最灵活的使用方式 li_quick = soup.find_all(attrs={'class':'item-1'}) for li_quick in li_quick: print('最灵活的查找方法:',li_quick)
-
find 查找命令
2019-03-21 09:59:143.4 find查找命令 3.4.1 语法 用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression] 默认路径为当前目录;默认表达式为 –print find [-H] [-L] [-P] [-D ...3.4 find查找命令
3.4.1 语法
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
默认路径为当前目录;默认表达式为 –print
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]3.4.2 简单示例
- 【find /tmp/ -name “*”】在tmp目录下查找所有文件和目录(查找范围包含子目录)
- 【find / -maxdepth 1 -name “*”】
查找根目录下,所有文件,不像下延伸,即只查找根目录下的文件和文件夹(相当于指定目录下的一级目录,不在其子目录中查找)。
同理示例 - 【find ./ -maxdepth 1 -name “a*”】在当前目录下最多延伸到当前目录(即不延伸子目录查找)查找以a开头的文件和文件夹
- 【find ./ -maxdepth 3 -mindepth 2 -name “a*”】在当前目录下面向下延伸2级,最多延伸至3级目录。查找文件名以a开头的文件和目录
- 【find -user root】在当前目录下面查找root用户所建立的文件或文件夹
3.4.3 常用参数
3.4.3.1 匹配标准参数
- 【-name ‘FILENAME’】:对文件名做精确匹配
文件名通配符为:{*|?|[]}- 【*】表示配置任意长度的任意字符
- 【?】表示匹配任意的字符(只占一个字符)
- 【[]】组合,只匹配组合中的一种情况()
例如:【find -name ‘[b,c]’】在当前目录下查找,只匹配首字母为a或者b的文件或者文件夹
- 【-iname ‘FILENAME’】:表示文件名匹配不区分大小写
- 【-regex PATTERN】:基于正则表达式进行文件名匹配匹配
- 【-user USERNAME】:基于文件的属主名来查找
- 【-group GROUPNAME】:根据属组名来查找
- 【-uid UID】:根据属主的id号来查找
- 【-gid GID】:根据属组的id号来查找
- 【-nouser】:查找没有属主的文件
- 【-nogroup】:查找没有属组的文件
- 【-size】:根据文件大小查找
#k,#M,#G 如果没指定单位默认是字节
[+|-]#k //如果+10k表示查找大于10k的文件,如果是-10k查询小于10k的文件
例如:find /etc –size 10k –ls 表示查询文件在10k~9k的文件 - 【-type】:根据文件类型查找
常用文件类型有- f:普通文件
- d:目录文件
- c:字符文件
- b:块文件
- l:符号链接文件
- p:管道设备文件
- s:套接字设备文件
例如: find /tmp/ -type d //表示查询tmp目录下的所有为目录的文件(查询目录)
3.4.3.2 组合查找参数
- 【-a】相当于&&,且
- 【-o】相当于||,或
- 【-not】相当于!,非
例如:
【find /tmp –nouser –a –type d -ls】查询tmp目录下面没有属组并且为目录的文件(ls 表示详细显示查询到文件信息)
【find /tmp –nouser -o –d -ls】查询tmp目录下面没有属组的文件,或者只是目录的目录文件
例如:/tmp/test目录下,属主不是user1,也不是user2的文件
【find /tmp/test –not (-user user1 –o –user user2 ) -ls】
3.4.3.3 根据文件时间戳查找参数
- 【-mtime】:根据文件的修改时间查找
- 【-ctime】:根据文件的改变时间
- 【-atime】:根据文件的访问时间
【+|-】#也支持
+5 离现在为止,至少有5天没访问
-5 离现在为止,最近5天曾经访问过
5 离现在为止,刚好5天访问过 - 【-mmin】:根据文件的修改时间(按分钟计算)
- 【-cmin】:根据文件的改变时间
- 【-amin】:根据文件的访问时间
- 【+|-】#
例如:find ./ -amin -5 表示查找5分钟之内访问过的文件
find ./ -amin 5 表示刚好过去5分钟那一刻访问过的文件
find ./ -amin +5 表示至少有5分钟没访问过的文件,即5分钟之前访问过的文件3.4.3.4 根据文件权限查收参数
- 【-perm MODE】精确匹配才能满足条件
- 【-perm /MODE】任意一位权限匹配就可以满足条件
- 【-perm -MODE】包含匹配
例如:【find ./ -perm 644】 表示权限为644的文件做精确匹配
【find ./ -perm /644】 但凡三个权限中有一个匹配就可以
【find ./ -perm -644】(rw-r–r--) 即包含关系。例如755(rwxr-xr-x)包含644(rw-r—r–),755也可以查出来。750(rwxr-x—)就不能匹配
例如:【find ./ -perm -00l】 表示查找其他用户有执行权限的文件
【find ./ -perm -022】 表示组有写权限并且其他用户也有写权限
【find ./ -perm /022】 表示组有写权限或者其他用户有写权限3.4.3.5 其它参数
- 【-print】将查找到的文件输出到标准输出
- 【-exec command {} \】将查找到的文件执行command操作,{}和\之间有空格
- 【-ok】和-exec相同,只不过在操作前要询问用户
例子:【find ./ -perm -006 –exec chmod o-w {} \】
表示把查找到的文件去掉其他用户的写入权限例:find . -name .svn | xargs rm -rf
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px">
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
=====================================================
KaTeX parse error: Expected 'EOF', got '#' at position 40: …t" -print #̲在HOME中查.txt文件并显示
$find . -name “.txt" -print
$find . -name "[A-Z]” -print #查以大写字母开头的文件
$find /etc -name “host*” -print #查以host开头的文件
$find . -name “[a-z][a-z][0–9][0–9].txt” -print #查以两个小写字母和两个数字开头的txt文件
$find . -perm 755 -print
$find . -perm -007 -exec ls -l {} ; #查所有用户都可读写执行的文件同-perm 777
$find . -type d -print
$find . ! -type d -print
$find . -type l -print
$find . -size +1000000c -print #查长度大于1Mb的文件
$find . -size 100c -print # 查长度为100c的文件
$find . -size +10 -print #查长度超过期作废10块的文件(1块=512字节)
$cd /
$find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0
$find /etc -name “passwd*” -exec grep “cnscn” {} ; #看是否存在cnscn用户
$find . -name “yao*” | xargs file
$find . -name “yao*” | xargs echo “” > /tmp/core.log
$find . -name “yao*” | xargs chmod o-w
======================================================
find -name april* 在当前目录下查找以april开始的文件
find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中
find -name ap* -o -name may* 查找以ap或may开头的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -name wa* -type l 在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2 在/home下查最近两天内改动过的文件
find /home -atime -1 查1天之内被存取过的文件
find /home -mmin +60 在/home下查60分钟前改动过的文件
find /home -amin +30 查最近30分钟前被存取过的文件
find /home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -user cnscn 列出/home目录内属于用户cnscn的文件或目录
find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录
find /home -group cnscn 列出/home内组为cnscn的文件或目录
find /home -gid 501 列出/home内组id为501的文件或目录
find /home -nouser 列出/home内不属于本地用户的文件或目录
find /home -nogroup 列出/home内不属于本地组的文件或目录
find /home -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
find /home -name tmp.txt -mindepth 3 从第2层开始查
find /home -empty 查找大小为0的文件或空目录
find /home -size +512k 查大于512k的文件
find /home -size -512k 查小于512k的文件
find /home -links +2 查硬连接数大于2的文件或目录
find /home -perm 0700 查权限为700的文件或目录
find /tmp -name tmp.txt -exec cat {} ;
find /tmp -name tmp.txt -ok rm {} ;
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件例子:
例如:
find ./ -user gandian -a -perm -020 -exec mv {} {}.new ;
表示将当前木下属主是gandian并且属组有写权限的文件的文件名,后面都加上【.new】字符
相关命令
【xargs】命令
例如
find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles ;
等同于
find /etc -size +1M | xargs echo >>/tmp/etc.largefiles
=======================相关示例
1、查找/var目录下属主为root并且属组为mail的所有文件;
find /var -user root -a -group mail -ls
2、查找/usr目录下属主不是root,bin,或student的文件;
find /usr -not ( -user root -o -user bin -o -user student ) -ls
3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
find /etc -not -user root -a -not -user student -a -mtime -7 -ls
4、查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为root
find / ( -nouser -o -nogroup ) -a -atime -1 -exec chown root:root {} ;
5、查找/etc目录下大雨1M的文件,并将其文件名写入/tmp/etc.largefiles文件中。
find /etc -size +1M -exec echo “{}” >>/tmp/etc.largefiles ;
find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息:
find /etc -not -perm /222 -ls3.4.4 附加(find --help)
[root@gdy tmp]# find --help 用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] 默认路径为当前目录;默认表达式为 -print 表达式可能由下列成份组成:操作符、选项、测试表达式以及动作: 操作符 (优先级递减;未做任何指定时默认使用 -and): ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2 EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2 位置选项 (总是真): -daystart -follow -regextype 普通选项 (总是真,在其它表达式前指定): -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev -ignore_readdir_race -noignore_readdir_race 比较测试 (N 可以是 +N 或 -N 或 N): -amin N -anewer FILE -atime N -cmin N -cnewer 文件 -ctime N -empty -false -fstype 类型 -gid N -group 名称 -ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式 -links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 文件 -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN -readable -writable -executable -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N -used N -user NAME -xtype [bcdpfls] -context CONTEXT actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ; -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ; 通过 findutils 错误报告页 http://savannah.gnu.org/ 报告错误及跟踪修定过程。如果您无法浏览网页,请发电子邮件至 <bug-findutils@gnu.org>。 [root@gdy tmp]#
3.4.5 附加(正则表达式语法)
元字符 描述 \ 将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。 ^ 匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。 + 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。 {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。 {n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o为一组,后三个o为一组。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串“oooo”,“o+”将尽可能多地匹配“o”,得到结果[“oooo”],而“o+?”将尽可能少地匹配“o”,得到结果 ['o', 'o', 'o', 'o'] .点 匹配除“\n”和"\r"之外的任何单个字符。要匹配包括“\n”和"\r"在内的任何字符,请使用像“[\s\S]”的模式。 (pattern) 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。 (?:pattern) 非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分时很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。 (?=pattern) 非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 (?!pattern) 非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。 (?<=pattern) 非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。 *python的正则表达式没有完全按照正则表达式规范实现,所以一些高级特性建议使用其他语言如java、scala等 (?<!patte_n) 非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。 *python的正则表达式没有完全按照正则表达式规范实现,所以一些高级特性建议使用其他语言如java、scala等 x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“[zf]ood”则匹配“zood”或“food”。 [xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。 [^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”任一字符。 [a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。 注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身. [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。 \b 匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。 \B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。 \cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。 \d 匹配一个数字字符。等价于[0-9]。grep 要加上-P,perl正则支持 \D 匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持 \f 匹配一个换页符。等价于\x0c和\cL。 \n 匹配一个换行符。等价于\x0a和\cJ。 \r 匹配一个回车符。等价于\x0d和\cM。 \s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 \S 匹配任何可见字符。等价于[^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于\x09和\cI。 \v 匹配一个垂直制表符。等价于\x0b和\cK。 \w 匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。 \W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。 \xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。 \num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。 \n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。 \nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。 \nml 如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。 \un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。 \p{P} 小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。中括号内的“P”表示Unicode 字符集七个字符属性之一:标点字符。 其他六个属性: L:字母; M:标记符号(一般不会单独出现); Z:分隔符(比如空格、换行等); S:符号(比如数学符号、货币符号等); N:数字(比如阿拉伯数字、罗马数字等); C:其他字符。 *注:此语法部分语言不支持,例:javascript。 \< \> 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。 ( ) 将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。 | 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
- 【find /tmp/ -name “*”】在tmp目录下查找所有文件和目录(查找范围包含子目录)
-
C++11 find和find_if的用法
2019-02-19 15:09:35回顾学习find和find_if, 网上查了一下资料,这里记录一下。 STL的find,find_if函数提供了一种对数组、STL容器进行查找的方法。使用该函数,需 #include <algorithm> 我们查找一个list中的数据,... -
C++ find find_if 和 lambda表达式结合的理解和用法
2020-07-16 17:15:59C++ find 理解和用法 -
find命令详解
2018-11-21 11:49:37find命令 一般格式: find + 目录名称 + 参数 @1参数的含义: -name #文件名称 实验1:按照文件名查找 ##查找/etc目录中文件名为passwd的文件 [root@localhost ~]# find /etc/ -name passwd /etc/... -
cmake教程4(find_package使用)
2018-06-03 19:34:311. cmake find_package的基本原理 2. 如何编写自己的 cmake module模块 3. 使用cmake find_package 使用不同版本的opencv lib问题(opencv 安装在指定的目录,不是系统的目录) 1. cmake find_package的... -
Linux下find命令详解
2018-07-31 00:48:07find命令格式: find path -option 【 -print 】 【 -exec -ok |xargs |grep 】 【 command {} \; 】 find命令的参数: 1)path:要查找的目录路径。 ~ 表示$HOME目录 . 表示当前目录 / 表示根目录... -
“轻松搞定CMake”系列之find_package用法详解
2020-04-12 13:27:37本文是“轻松搞定CMake”系列博客中的一篇,该篇文章的主要目的是详细讲解一下CMake中搜包命令find_package的使用和原理。 find_packakge命令基本介绍 在我们实际开发过程中,经常不可避免会使用到第三方开源库,... -
linux下使用find命令全局查找文件
2022-02-09 00:35:45找后缀是 .pcd 的文件 find -name "*.pcd -
find命令find: missing argument to解决方法
2021-04-10 15:35:48find搜索姿势 默认先处理文件夹,再处理文件夹 find [选项] [路径] [查找条件] [处理动作] find后接命令 find命令强大之处在于 可以在查找到内容后,调用命令对查找到的内容进行进一步的处理 查看find帮助文件 ... -
前端开发:JS中查找数组的目标元素方法find()、findIndex()的使用
2022-01-22 18:46:13find() 方法为数组中的每个元素都调用一次函数执行:当数组中的元素在测试条件时返回true时, find() 返回符合条件的元素,之后的值不会再调用执行函数;如果没有符合条件的元素返回 undefined。 5、注意事项 (1)... -
ES6数组方法find()、findIndex()的总结
2020-04-22 13:21:19本文主要讲解ES6数组方法find()与findIndex(),关于JS的更多数组方法,可参考以下: ①JavaScript 内置对象之-Array ②ES5新增数组方法(例:map()、indexOf()、filter()等) ③ES6新增字符串扩张方法includes()、... -
python 爬虫之find、find_all用法
2019-07-09 16:55:54BeautifulSoup 文档里,find、find_all两者的定义如下: find_all(tag, attributes, recursive, text, limit, keywords) find_all(标签、属性、递归、文本、限制、关键词) find(tag, attributes, recursive, ... -
【Python爬虫】Beautifulsoup4中find_all函数
2019-04-25 21:54:29find_all() find_all( name , attrs , recursive , text , **kwargs ) find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.这里有几个例子: soup.find_all("title") #[<title>The ... -
Windows命令之find命令
2021-05-20 10:13:11find 命令用于查找文档中的特定字符和数字及行号, 好比, 我们在阅读文档时, 使用的快捷键 Ctrl + F 来查找是一个效果, 经过 find 查找的字符也可以重定向到一个文本文档里面去, 提取特定的字符, 来进行文档的整合 ... -
DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
2022-03-31 15:29:36DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead driver.find_element_by_####("###") 弃用警告:find_element_by_* 的一系列命令已经被弃用。请使用 find_... -
《Linux运维总结:find命令高级用法详解》
2021-09-08 15:49:36一、基本用法 #1、查找空文件 find ./ -size 0 #查找当前目录下大小为0的文件 find -type f -empty # -type f指明了要查找的是文件 #2、查找空目录 find -type d -empty #3、查找3天前更改过的文件 find ./ -mtime ... -
SeleniumWebDriver之FindElement和FindElements
2019-09-08 23:09:17为什么需要Find Element/s命令? 与Web页面的交互需要用户定位Web元素。FindElement命令用于唯一地标识页面中的(单个)Web元素。然而,FindElements命令用于唯一地标识页面中的Web元素列表。 有多种方法可以标识页面中... -
find()和findIndex()函数详解
2020-07-30 16:48:12今天我在拿数组中的存在的某一项索引时,我用了filter(),结果折腾了半天还是没求出索引,结果询问同事,他说你直接用findIndex()就可以了,一语点醒梦中人,可能平时ES6的这些函数用的少,根本就想不起来用这个。... -
npm install时出现gyp ERR stack Error: Could not find any Python installation to use
2021-10-20 13:52:10vue项目使用npm install按照依赖时,报以下错误: gyp verb command rebuild [] gyp verb command clean [] gyp verb clean removing "build" directory gyp verb command configure [] gyp verb find Python Python... -
c++中std::map简介及find用法
2021-11-29 22:54:33五、map的find用法 一、map简介 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能... -
find方法和 findIndex方法的使用
2020-10-31 10:47:16find方法和findIndex方法都是用于查找数组中符合条件的元素,但是两者有细微的差别 find方法是通过判断条件返回符合条件的对象 // 定义一个数组,里面包含多个对象,通过find方法来查找满足条件的对象 var arr = ... -
linux find 命令查找文件和文件夹
2018-04-12 10:21:12查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查找关键字 -print 如果需要更进一步的了解,可以参看Linux的命令详解。这里摘抄如下: ·find path -option [ -... -
【cmake】——find_path/find_library用法例子
2020-10-20 10:47:15find_path(TENSORRT_INCLUDE_DIR NvInfer.h HINTS ${TENSORRT_ROOT} ${CUDA_TOOLKIT_ROOT_DIR} PATH_SUFFIXES include) find_library(TENSORRT_INFER libnvinfer.so HINTS ${TENSORRT_ROOT} ${CUDA_TOOLKIT_ROOT_DIR -
CMake基础教程(19)find_library查找库路径
2022-03-13 16:44:12find_library ( <VAR> name | NAMES name1 [name2 ...] [NAMES_PER_DIR] [HINTS [path | ENV var]... ] [PATHS [path | ENV var]... ] [PATH_SUFFIXES suffix1 [suffix2 ...]] [DOC "cache ... -
Java8 Stream(9)List集合查找 findFirst、findAny、anyMatch、allMatch、noneMatch
2021-04-30 10:05:37在开发中,经常要判断集合中是否有指定的值,对于在集合中查询匹配数据,可以用到findFirst、findAny、anyMatch、allMatch和noneMatch这些方法。 先造点数据 pigs.add(new Pig(1, "猪爸爸", 31, "M", false)); pigs.... -
could not find driver
2022-04-06 15:07:21这个问题是php没有打开扩展pdo或者是连接pdsql数据库 一般在xampp apache 和nginx 会出现 解决办法 打开php配置文件php.ini 打开后搜索pdo 打开后重启服务 就ok了