在文件夹和子文件夹中搜索所有带有.sql扩展名的文件


17

我想在文件夹和子文件夹(递归)中搜索所有扩展名为.sql的文件。

我怎样才能做到这一点?

Answers:


29

要么...

find $directory_name -name \*.sql

例如

find / -name \*.sql

要么

find ~ \*.sql

(其中〜等于/ home /您的用户名/),或...

find /usr/local/share/ \*.sql

等等。


2

在命令行中运行:

cd / && find | grep '\.sql$'

将“ /”更改为要搜索的目录。

find命令无需grep就可以完成任务(使用其他选项),但是我发现上述用法更为方便。

依次执行以上命令:

  1. 将当前目录更改为根目录(cd /
  2. 列出当前目录(find)或以下的所有文件和目录
  3. 过滤文件和目录以“ .sql”(| grep '\.sql$')结尾的任何内容

谢谢,你能解释一下吗?您使用grep并将其输出传递给查找?
Blankman

反之亦然。我正在使用find并将其输出传递给grep。我在上面添加了更详细的解释。
Barbarrosa 2011年

在Mac上也可以使用吗?我试着找到 grep'\ .sql $'并输出使用帮助信息。
Blankman

find是一个功能强大的工具,您实际上不需要将输出传递给grep。这是一个不错的链接-content.hccfl.edu/pollock/unix/findcmd.htm
Panther

1
find已经具有过滤功能
enzotib

1

我知道这是一篇旧文章,但是我对此很陌生,并且我找到了一种简单的方法来查找目录及其子目录中某个扩展名的所有文件。好吧,您首先导航到parent Directorythen find . -name '*.sql',然后它将在目录及其子目录中找到所有带有.sql扩展名的文件。

就我而言,我想删除目录及其子目录中的所有.xml文件,所以我要做的更多的是我在这里添加了removefind . -name '*.xml' | xargs rm

希望这可以帮助某人:)


2
find了解-delete命令。无需参与rm。或者,您可以使用-exec命令直接调用它,而无需通过管道和绕行xargs
David Foerster,

0
locate -br \\.sql$ | egrep '^/folder/path/'

如果尚未安装,请先使用以下命令进行安装:

sudo apt install mlocate

这需要一个最新的mlocate.db实例,而该实例不是在Ubuntu中开箱即用的(我相信)。另外,为什么不简单locate '/folder/path/*.sql'呢?
大卫·佛斯特

@DavidFoersterI我尝试按您的指定进行操作,但是它不起作用,我猜中的正locate则表达式与egrep
Vzzarr

locate匹配glob表达式,例如/folder/path/*.sql,而不是正则表达式。
David Foerster '18

对不起,但是据man locate我了解-r, --regexp REGEXP - Search for a basic regexp REGEXP,我认为它是正则表达式。无论如何,我尝试了您的“全局表达式”,但是没有用,对不起
Vzzarr

在从选项概要中挑选之前,请至少阅读描述的前几句话:“如果--regex未指定,则PATTERNs可以包含通配符。”(来源
David Foerster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.