ls -R /media/X | grep filename
让我搜索文件名,但它只打印文件名,而不打印其所在的目录。我怎样才能打印文件名和它的目录?
答案1
您可以使用命令find
为了这些目的。
尝试
find /media/X | grep filename
没有的话你也可以达到同样的结果grep
(正如@geekosaur 指出的那样),但是find
如果你已经习惯了的话, 的语法可能会很麻烦grep
。
答案2
ls
并且grep
并不是真正合适的工具;您需要命令find
。
find /media/X -name '*filename*'
这也可以让您按年龄等条件查找。
答案3
目前接受的 @Dennis 的答案如果有大量文件,将会消耗大量的 CPU 和/或 IO,/media/X
因为寻找将递归列出一切除非使用某些限制标志,否则在定义的路径下。在一般情况下,这可能无关紧要,但深度递归后再 grep 过长的列表肯定不是最佳选择。
您通常会使用定位命令(例如来自移动定位包)。 例如:
$ locate virtualbox/README.Debian
/usr/share/doc/virtualbox/README.Debian.gz
/usr/share/doc/virtualbox/README.Debian.html
这种方法的主要限制在于各种定位软件包通常不会索引 ecryptfs 下的私有主目录,这可能是 Ubuntu 用户的一个担忧。由于 OP 使用的是 Ubuntu,我建议使用定位对于系统文件,以及寻找对于存储在 ecryptfs 挂载中的任何内容,有一些合理的限制标志。
最后,值得一提的是,使用寻找如果没有绝对路径作为起点,可能无论如何都无法实现 OP 想要的结果。最初的问题是如何返回文件名及其路径,因此,除非可以接受相对路径,定位更有可能返回正确的结果。