Ⅰ linux find 命令详解
find 命令的基本结构如下: find [paths] [expression] [actions]
find 命令接受一个或多个 路径 ( paths )作为搜索范围,并在该路径下 递归 地搜索。即检索完指定的目录后,还会对该目录下的子目录进行检索,以及子目录下的子目录。。。直到到达目录树底部。
默认情况下(不带任何搜索条件),find 命令会返回指定目录下的 所有文件 ,所以常常需要通过特定的 expression 对结果进行 筛选 。
find 命令默认的 action 是将所有检索结果打印至标准输出。可以通过自定义 action ,让 find 命令对搜索到的结果执行特定的操作。
这里先不做详细解释,简单地测试下 find 命令:
find 命令中的 -name 选项可以根据文件名称进行检索( 区分大小写 )。如需要忽略文件名中的大小写,可以使用 -iname 选项。
-name 和 -iname 两个选项都支持 wildcards 。如:
find /usr -name '*.txt' 查找 /usr 目录下所有文件名以 .txt 结尾的文件 find /usr -name '????' 查找 /usr 目录下所有文件名刚好为 4 个字符的文件
有些时候,你需要在搜索时匹配某个文件或目录的 完整路径 ,而不仅仅是匹配文件名。可以使用 -path 或 -ipath 选项。
如查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src 。可以使用以下命令: find /usr -path '*/src/*.txt'
如果只想搜索得到文件 或 目录,即不想它们同时出现在结果中。可以使用 -type 选项指定文件类型。
-type 选项最常用的参数如下:
find /usr -type d -name 'python*' 检索 /usr 下所有文件名以 python 开头的 目录
find 命令支持 -empty 选项用来检索 为空 的文件或目录。空文件即文件里没有任何内容,空目录即目录中没有任何文件或子目录。
find ~ -type d -empty 检索用户主目录下所有的空目录
find 命令也允许用户对当前的匹配条件进行 “反义” (类似于 逻辑非 操作)。
如需要检索 /usr 下所有文件名 不 以 .txt 为后缀的文件。可以使用以下命令: find /usr -type f ! -name '*.txt'
也可以“翻转”任何其他的筛选条件,如: find /usr -type f ! -empty 检索 /usr 下所有内容不为空的文件
为了检索归属于特定用户的文件或目录,可以使用 -user 选项。
find / -type f -user starky 检索根目录下所有属主为 starky 的文件
类似于 -user 选项, -group 选项则可以根据文件或目录的 属组 进行检索。
有些时候,需要根据文件创建或修改的时间进行检索。
Linux 系统中,与文件相关联的时间参数有以下三种:
与此对应的是 find 命令中的 -mtime , -atime 和 -ctime 三个选项。
这三个选项的使用遵循以下示例中的规则:
find /usr -type f -mtime 2 检索 /usr 下两天前被修改过的文件
如果觉得 -mtime 等选项以 天 为单位时间有点长,还可以使用 -mmin , -amin , -cmin 三个选项: find /usr -type f -mtime +50 -mtime -100 检索 /usr 下 50 到 100 天之前修改过的文件 find /usr -type f -mtime 2 -amin 5 检索 /usr 下两天前被修改过且 5 分钟前又读取过的文件
-size 选项允许用户通过文件大小进行搜索(只适用于文件,目录没有大小……)。
表示文件大小的单位由以下字符组成:
另外,还可以使用 + 或 – 符号表示 大于 或 小于 当前条件。
find / -size +1G 检索文件大小高于 1 GB 的文件
find 命令可以使用 -perm 选项以文件权限为依据进行搜索。
如需要检索 /usr 目录下权限为 rwxr-xr-x 的文件,可以使用以下命令: find /usr -perm u=rwx,g=rx,o=rx
搜索 /usr 目录下所有权限为 r-xr-xr-x (即系统中的所有用户都只有读写权限)的文件和目录,可以使用以下命令: find /usr -perm a=rx
很多时候,我们只想匹配文件权限的一个 子集 。比如,检索可以直接被任何用户执行的文件,即只关心文件的执行权限,而不用管其读写权限是什么。
上述的需求可以通过以下命令实现: find / -type f -perm /a=x 其中 a=x 前面的 / 符号即用来表示只匹配权限的某个子集(执行权限),而不用关心其他权限的具体设置。
-perm 选项也支持数字形式的文件权限标记。
find /usr -perm 644 搜索 /usr 目录下权限为 644 (即 rwxr-xr-x )的文件
find 命令默认是以 递归 的方式检索项目的,这有时候会导致得到的结果数量非常巨大。可以使用 -maxdepth 限制 find 命令递归的层数。
find / -maxdepth 3 搜索时向下递归的层数最大为 3
在之前的例子中有出现多个搜索条件的 组合 以及对某个搜索条件的 反转 。 实际上 find 命令支持 “and” 和 “or” 两种逻辑运算,对应的命令选项分别是 -a 和 -o 。通过这两个选项可以对搜索条件进行更复杂的组合。
此外还可以使用 小括号 对搜索条件进行 分组 。注意 find 命令中的小括号常需要用 单引号 包裹起来。因小括号在 Shell 中有特殊的含义。
如检索 /usr 下文件名以 python 开头且类型为目录的文件 find /usr -type d -name 'python*'
该命令等同于: find /usr -type d -a -name 'python*'
更复杂的组合形式如: find / '(' -mmin -5 -o -mtime +50 ')' -a -type f
-delete 选项可以用来删除搜索到的文件和目录。
如删除 home 目录下所有的空目录: find ~ -type d -empty -delete
-exec 选项可以对搜索到的结果执行特定的命令。
如需要将 home 目录下所有的 MP3 音频文件复制到移动存储设备(假设路径是 /media/MyDrive ),可使用下面的命令: find ~ -type f -name '*.mp3' -exec cp {} /media/MyDrive ''
其中的 大括号 ( {} )作为检索到的文件的 占位符 ,而分号( ; )作为命令结束的标志。因为分号是 Shell 中有特殊含义的符号,所以需要使用单引号括起来。 每当 find 命令检索到一个符合条件的文件,会使用其完整路径取代命令中的 {} ,然后执行 -exec 后面的命令一次。
另一个很重要的用法是,在多个文件中检索某个指定的字符串。 如在用户主目录下的所有文件中检索字符串 hello ,可以使用如下命令: find ~ -type f -exec grep -l hello {} ''
创建 Gzip 格式的压缩文件的命令为: tar -czvf filename.tar.gz <list of files>
现在假设需要将用户主目录下所有的 MP3 文件添加到压缩包 music.tar.gz 中,直观的感觉是,其命令应为如下形式: find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} ''
实际情况是,这样得到的 music.tar.gz 其实只包含一个 MP3 文件。 原因是 find 命令 每次 发现一个音频文件,都会再执行一次 -exec 选项后面的压缩命令。导致先前生成的压缩包被覆盖。
可以先让 find 命令检索出所有符合条件的音频文件,再将得到的 文件列表 传递给后面的压缩命令。完整的命令如下: find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} +
如果想浏览搜索到的文件(目录)的详细信息(如权限和大小等),可以直接使用 -ls 选项。
find / -type file -size +1G -ls 浏览所有 1G 以上大小的文件的详细信息
A Guide to the Linux “Find” Command find 命令手册 : man find
Ⅱ 在Linux系统下 查找/etc下以http开头的文件;查找/etc下以shell开头且与shell大小写无关的文件名及其匹配
1、首先使用cat -A文件名可以查看,可以通过以下几个方法查找替换,cat -A filename 就可以看到内windows下的断元字符 ^容M。
Ⅲ linux下怎么样重命名文件
这两天在使用Ubuntu系统上进行开发软件的安装,一直遇到创建的AndroidStudio图标无法使用的问题,创建的图标提示「应用程序启动错误」。在网上也找了很多文章,都是说文件夹中包含空格。但是文件路径确实没包含空格,但是包含-,即"android-studio",所以准备重命名进行尝试,但是遇到"barewordnotallowed"的问题。Linux下对文件重命名有两种命令:mv,renamemv很简单,move文件移动mv/dir/file1/dir2/file1两个参数,第一个是源文件,第二个是目的地,如果第二个参数文件名不一样,则会重命名。当两个参数不带目录,只有文件名时,那就是重命名了。这是单个文件的重命名。renamearg1arg2arg3rename才是真正的批量重命名命令。而且他是3个参数,不是2个。arg1:旧的字符串arg2:新的字符串arg3:匹配要重命名的文件,可以使用3种通配符,*、?、[char],*表示任意多个字符,?表示单个字符,[char]匹配char单个自定的精确字符,可以填写任意字符,foo[a]*表示只匹配fooa开头的文件名,如果一个文件是foobcc.txt,是不会被匹配的。值的注意的是,此命令在不同的Linux版本也有不同,Debian一系的操作系统别有用法。举例说明:比如/home下有两个文件abbcc.txt,addbb.txt,a.txt我想把a替换为xxx,命令是这样的:rename“a”“xxx”*.txt那么它会首先去匹配有哪些文件需要修改,这里凡是.txt后缀的文件都会被匹配,如果改成?.txt则只会匹配到一个文件,那就是a.txt。然后把匹配到的文件中的a字符替换为xxx,注意测试时abab.txt这样的,只会替换第一个a,有待再了解。说到Debian一系的操作系统,比如Ubuntu,这个命令这样使用是不对的,报错,向下面这样的:Bareword“a”notallowedwhile“strictsubs”inuseat(eval1)line1.经过Google之后发现有这样的说法:OnDebian-baseddistrosittakesaperlexpressionandalistoffiles.youneedtowouldneedtouse:rename‘s/foo/foox/’*这里是一个perl表达式,好理解点说就是综合了前两个参数为1个,这样就只需要2个参数,而非上面所说的3个参数形式。所以在Ubuntu下执行上面举例的重命名时,命令是这样的:rename‘s/a/xxx/’*.txt
Ⅳ linux如何查找某个文件名
题主你好,
linux中,最常用的查找文件命令是find.
最常用的查找文件方式有两种:
a.精确查找文件,即提供被查找文件的完整名称.
举例: 我在/root/ok/tmp文件夹下有两个文件, 名为: x.t和y.txt
可以看到x.t和x.txt这两个文件都找到了, 并且给的是绝对路径.
写在最后: 当然,上面只是find命令的一个小小的用法, 题主看看利用上面的方法是否可以满足要求, 如果不满足, 题主可以追问, 详细的说一下题主的场景, 我再给出解决方案.
希望可以帮到题主,欢迎追问.
Ⅳ linux下按文件名和文件内容查找文件
1首先按文抄件名使用命令袭find/etc-name“xxxx”find是查询命令/etc是所要查询的目录-name表示以名字的方式查找xxxx是你要查找的文件名如果要查某个后缀的文件可以使用通配符如''*.xt'或'*.conf'2然后是按文件内容find/etc-name“xxxx”-execgrep'AAAA'{}\;-print前面是第一步的查询文件名后面的AAAA是你要查询的内容-print是为了显示出查找到匹配文件的路径
Ⅵ linux下按文件名和文件内容查找文件
1首先按文件名使用命令find/etc-name“xxxx”find是查询命令/etc是所要查询的目录-name表示以名字的方式查找专xxxx是你要查找的文件名如果要查某属个后缀的文件可以使用通配符如''*.xt'或'*.conf'2然后是按文件内容find/etc-name“xxxx”-execgrep'AAAA'{}\;-print前面是第一步的查询文件名后面的AAAA是你要查询的内容-print是为了显示出查找到匹配文件的路径
Ⅶ linux中匹配文件中的字符串
cd 路径grep ' \ <字符串\>' filename如果有需要自动保存到文件可以这样grep ' \ <48\>' filename >> 文件名 (追加)
Ⅷ linux下按文件名和文件内容查找文件
在当前目录下,查找所有内容包含‘abc'的文件
find . -type f | xargs grep -l 'abc'
或
find . -type f -exec grep -l 'abc' {} ;
(8)linux匹配文件名扩展阅读:
linux查找文件命内令find
根据部分文件名查找方法:容
这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。
例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入:
find /etc -name '*srm*'
这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
find/etc -name 'srm*'
这是只有像srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。
Ⅸ Linux中使用grep命令搜索文件名及文件内容的方法
从文件中搜索并显示文件名当你从不止一个的文件中搜索时,默认它将显示文件名:代码如下:grepword文件名greproot/etc/*示例输出:代码如下:/etc/bash.bashrc:Seemansudo_rootfordetails./etc/crontab:17****rootcd/run-parts–report/etc/cron.hourly/etc/crontab:256***roottest-x/usr/sbin/anacron||(cd/run-parts–report/etc/cron.daily)/etc/crontab:476**7roottest-x/usr/sbin/anacron||(cd/run-parts–report/etc/cron.weekly)/etc/group:root:x:0:grep:/etc/gshadow:Permissiondenied/etc/logrotate.conf:create0664rootutmp/etc/logrotate.conf:create0660rootutmp每行开始的第一个部分是文件名(如:/etc/crontab、/etc/group)。使用-l选项可以只显示文件名:代码如下:grep-lstringfilenamegrep-lroot/etc/*示例输出:代码如下:/etc/aliases/etc/arpwatch.confgrep:/etc/at.deny:Permissiondenied/etc/bash.bashrc/etc/bash_completion/etc/ca-certificates.conf/etc/crontab/etc/group你也可以逆转输出;使用-L选项来输出那些不匹配的文件的文件名:代码如下:grep-Lwordfilenamegrep-Lroot/etc/*示例输出:代码如下:/etc/apm/etc/apparmor/etc/apparmor.d/etc/apport/etc/apt/etc/avahi/etc/bash_completion.d/etc/bindresvport.blacklist/etc/blkid.conf/etc/bluetooth/etc/bogofilter.cf/etc/bonobo-activation/etc/brlapi.key根据文件内容查找文件输入以下命令:代码如下:grep'string'*.txtgrep'main('*.cgrep'#include'*.cgrep'getChar*'*.cgrep-i'ultra'*.confgrep-iR'ultra'*.conf其中-i:忽略模式(匹配字符串valid、VALID、ValID)和输入文件(匹配file.cFILE.cFILE.C)的大小写。-R:递归读取每个目录下的所有文件。高亮匹配到的模式在搜索大量文件的时候你可以轻松地高亮模式:代码如下:$grep–color=auto-iR'getChar();'*.c为查找到的模式显示文件名和行号你也许需要显示文件名和行号:代码如下:$grep–color=auto-iRnH'getChar();'*.c其中,-n:在输出的每行前面添加以1开始的行号。-H:为每个匹配打印文件名。要搜索多个文件时这是默认选项。(LCTT译注:-h选项强制隐藏文件名;另外-l和-L选项用于仅显示匹配/不匹配的文件名,而-H和-h用于控制在显示匹配行前显示/不显示文件名,注意区分。)代码如下:$grep–color=auto-nH'DIR'*输出样例:你也可以使用find命令:代码如下:$find.-name*.c-print|xargsgrepmain(
Ⅹ Linux简要命令
所有命令的参数都是使用空格分隔的,例如 ls -l 。在这里ls即为命令名, -l 为此命令的参数,在 ls 与 -l 之间有一个空格,但是在 -l 内部不能有空格。
由于Linux继承于Unix,而Unix操作系统在当初设计的时候,键盘并不可靠,而且敲键盘比较费劲(比如容易卡住),因此大部分命令都非常简短,一般是完整的英文单词去掉元音字母(aeiou)后的缩写,这是一个历史问题。
整个操作系统的磁盘都被划分为很多个目录(directory)或称文件夹(folder),还有文件(file)。每个目录下还可以有子目录(sub direcotory)与文件,这样就形成了一个树状结构,树根为 / ,被称为根目录(root directory)。
在 任何时候 ,你都有一个 当前目录 (Working Directory),你所有的操作都是相对于当前目录做出的,以当前目录为基准的目录名或者文件名叫做相对目录。例如若你的当前目录是/home/alex,在/home/alex目录下有一个叫Public的子目录,还有一个叫log.txt的文件,则Public与log.txt就是相对目录名与相对文件名。
每个目录与文件都有一个全路径(full path)名,这个全路径以/开头,遍历整个目录,直到最终的目录名或者文件名为止。例如在Linux中,/下有etc、home、usr、lib等子目录,而home目录下有alex目录,alex目录下有Public目录。则在这里Public的全路径名就是 /home/alex/Public ,注意在这里必须大小写一致。
当然也有可能在其它的名叫Public的目录或者文件,但是它们的全路径肯定是不一样的。就像在中国有一个叫Alex的人,在美国也有一个叫Alex的人,他们可以分别称为中国的Alex与美国的Alex,这就是他们的全路径 ;)。全路径又叫绝对路径(absolute path)。
在Linux里,每个用户都有一个家目录(home directory),一般情况下用户的家目录就是/home目录下相应的用户名,例如alex用户的家目录就是/home/alex。
大部分文件都有扩展名(extension name),扩展名即为文件名最后一个点号(.)后面的文字,扩展名一般都表示了文件的类型。例如在log.txt这个文件名中,txt是扩展名,表示这个文件是一个文本文件(TeXT file),而文本文件一般都是可以直接查看内容的。而在house.1.jpg这个文件名中,其扩展名为jpg,表示这个文件是一个JPG格式的图形文件,而图形文件一般都是需要使用图形软件打开才能看到其内容的。
pwd 是Pring Working Directory的缩写,此命令的作用是打印(print)当前的(working)目录(directory)的全路径名。
当你打开终端或者切换目录之后,你最好运行一下 pwd 命令,确认当前的目录是不是你想要切换的目录。
pwd 命令一般不需要参数。
ls 是LiSt的缩写,此命令的作用是列举目录下的文件与子目录。
当你不带参数运行 ls 命令时,此命令将列举出当前目录下的文件与子目录的名称。
当你加上-l参数运行 ls 命令时,此命令将列举出当前目录下的文件与子目录的名称,以及它们的修改时间、大小等信息。
你也可以使用 ls 命令列举其它目录下的文件与子目录的名称,例如,运行 ls / 即可列举出根目录下的文件与子目录名,运行 ls -l / 即可列举出根目录下的文件与子目录名,以及它们的修改时间、大小等信息。
cd 是Change Directory的缩写,此命令的作用是切换当前的工作目录。
例如,运行 cd /home/alex 将把当前目录切换为 /home/alex 。当然,cd后面的参数也可以是相对目录。例如若当前目录为 /home/alex ,而 /home/alex 目录下有一个目录叫Public,则运行 cd Public 则会将当前目录变为 /home/alex/Public 。
如果cd命令后面不接任何参数,则将把当前目录设置为用户的家目录。
cp 是CoPy的缩写,此命令的作用是复制文件或者文件夹。
例如,运行 cp 1.txt 2.txt 将把当前目录下的 1.txt 文件复制成 2.txt 文件。运行 cp 1.txt /tmp/2.txt 将把当前目录下的 1.txt 复制成 /tmp/2.txt 文件,运行 cp 1.txt /home/alex/ 将把 1.txt 文件复制到 /home/alex/ 目录下。
rm 是ReMove的缩写,此命令的作用是删除文件或者文件夹。
例如,运行 rm 2.txt 将删除当前目录下的 2.txt 文件,运行 rm /tmp/2.txt 将删除 /tmp/2.txt 文件。
你也可以使用 rm 来删除目录,此时需要带上-R参数(recursive,即递归的意思),例如 rm -R /tmp/abc 将删除整个 /tmp/abc 目录。
删除时一般都会询问你让你确认是否要删除,如果你不需要被提问确认,可以加上-f参数,例如 rm -f /tmp/1.txt 。
mv 是MoVe的缩写,此命令的作用是移动文件或者文件夹,或说是为文件或者文件夹改名。注意,一旦移动成功,则原来的文件或者文件夹就不存在了。
例如,运行 mv 1.txt 2.txt 将把当前目录下的 1.txt 改名为 2.txt ,运行 mv 1.txt /tmp/2.txt 将把当前目录下的 1.txt 移动成为 /tmp/2.txt 文件。
mkdir 是MaKe DIRectory的缩写,此命令的作用是创建目录。
例如 mkdir abc 将在当前目录下创建一个名为 abc 的目录, mkdir /tmp/xyz123 将在 /tmp 目录下创建一个名为 xyz123 的目录。
mkdir 可以带-p参数,这样即可同时创建多层目录,例如 mkdir -p a/b/c/123 将在当前目录下创建a目录,在a目录下创建b目录,在b目录下创建c目录,在c目录下创建123目录。
在Linux下还有几个特殊的目录,它们分别是:
有一个特殊的符号表示文件名匹配,即 * 。例如 cp *.txt /tmp/ 将把当前目录下的以 .txt 结尾的文件名都复制到 /tmp/ 目录下, ls a*.txt 将列举出当前目录下所有以 a 开头,以 .txt 结尾的文件名与目录, rm /tmp/1*log 将删除 /tmp 目录下所有文件名以 1 开头,以 log 结尾的文件。
所有以 . 开头的文件与目录都表示是隐藏文件 / 目录,例如 .vimrc ,例如 .. ,在 ls 时一般是看不到这些文件与目录的,如果想要看到,需要使用 ls 的 -a 参数,例如 ls -al 。
Linux下有大量命令/软件,在此我们仅列举几个可能会用到的,可以在使用过程中慢慢熟悉。
未经允许不得转载:山九号 » linux匹配文件名|linux下按文件名和文件内容查找文件