查找路径中的文件

查找路径中的文件

我想以非常有效的方式在给定的路径中搜索特定文件类型(.jpeg)。

我目前有两个选择

  1. ls- R | grep .jpeg
  2. 使用'find'

哪一个更好?还有比这更好的方法吗?

答案1

我会用find /somewhere/on/disk -name "*.jpeg"超过ls

还有一个locate *.jpeg选项是使用数据库。但是,此数据库仅定期更新(通常来自作业cron),因此在您调用命令时某些文件可能尚未被索引,locate因此会产生不太准确的结果。您可以通过调用命令强制创建或更新此数据库updatedb

关于findvsls性能,ls会对输出进行排序,这需要时间,但你不一定需要它。此外,ls还会输出大量信息,grep之后需要进行过滤。

参考:

答案2

我一直是 find 的粉丝,它可以做很多事情:

查找/起始/路径-类型f-名称“* .jpeg”

所以如果我想从我的主目录开始:

查找/home/john-type f-name“*.jpeg”

您可能需要查找 .jpg 和 .jpeg(DOS 时代的 3 个字母的扩展名),因为文件可以以任意方式命名:

查找 . -type f \( -name "*.jpg" -o -name "*.jpeg" \)

答案3

取决于你想要的结果。ls -R不会告诉您在哪个目录中找到了该文件,而find 会。

此外,ls -R 会生成更多输出,随后会对其进行过滤,同时find专门搜索您想要的内容。如果没有进行测量,我猜这find 通常更有效率。

答案4

您可能还想用大写字母匹配 .JPG 和 .JPEG 格式的文件。使用 find,您可以添加-name '*.JPG' -name '*.JPEG',或者您可以将 find 连接到 grep(是的,这有点丑陋):

find . -type f | grep "\.[Jj][Pp][Ee]\?[Gg]$"

这将匹配:

  • foo.jpg
  • 酒吧.jpeg
  • foo.JPG
  • 条形图.JPEG

相关内容