我想以非常有效的方式在给定的路径中搜索特定文件类型(.jpeg)。
我目前有两个选择
ls- R | grep .jpeg
- 使用
'find'
哪一个更好?还有比这更好的方法吗?
答案1
我会用find /somewhere/on/disk -name "*.jpeg"
超过ls
。
还有一个locate *.jpeg
选项是使用数据库。但是,此数据库仅定期更新(通常来自作业cron
),因此在您调用命令时某些文件可能尚未被索引,locate
因此会产生不太准确的结果。您可以通过调用命令强制创建或更新此数据库updatedb
。
关于find
vsls
性能,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