我想搜索以chrom
在/var
目录中。所以我执行了这个
$ ls -R | grep "^chrom"
令我惊讶的是,它表明这。很少有起始行是这样的:
amit@ElMaverick:/var$ ls -R | grep "^chromium"
chromium-browser_55.0.2883.87-0ubuntu0.16.04.1263_amd64.deb
chromium-browser-l10n_55.0.2883.87-0ubuntu0.16.04.1263_all.deb
chromium-codecs-ffmpeg-extra_55.0.2883.87-0ubuntu0.16.04.1263_amd64.deb
ls: cannot open directory './cache/apt/archives/partial': Permission denied
ls: cannot open directory './cache/cups': Permission denied
ls: cannot open directory './cache/ldconfig': Permission denied
chromium-browser_chromium-browser.png
chromium-browser_chromium-browser.png
chromium-bsu_chromium-bsu.png
chromium-browser_chromium-browser.png
ls: cannot open directory './lib/apt/lists/partial': Permission denied
ls: cannot open directory './lib/bluetooth/78:0C:B8:46:10:D5': Permission denied
chromium-browser.conffiles
chromium-browser-l10n.list
chromium-browser-l10n.md5sums
chromium-browser.list
chromium-browser.md5sums
chromium-browser.postinst
chromium-browser.prerm
chromium-codecs-ffmpeg-extra.list
chromium-codecs-ffmpeg-extra.md5sums
ls: cannot open directory './lib/mysql': Permission denied
ls: cannot open directory './lib/mysql-files': Permission denied
我不想在输出中看到这些行。
ls: cannot open directory
所以,我有两个问题:
- 如何仅过滤那些没有任何类型错误的行?
- 有没有办法抑制特定的输出行?
请提供解决该问题的一般方法,而不仅仅是针对该问题。
答案1
将标准错误流重定向
ls
到/dev/null
:ls -R 2>/dev/null | grep '^chrom'
进一步进行 grep 操作:
ls -R 2>/dev/null | grep '^chrom' | grep -v 'some additional pattern'
您也可以考虑使用find
(为什么*不*解析`ls`?):
find . -name 'chrom*' ! -name 'some additional pattern' 2>/dev/null
请注意,find
使用文件名通配模式,同时grep
使用正则表达式。您find
还可以专门查找文件(带有-type f
)或目录(-type d
)等,例如
find . -type f -name 'chrom*' ! -name 'some additional pattern' 2>/dev/null
命令的每个部分都find
类似于针对找到的路径名的“测试”。-type
针对文件类型进行测试,同时-name
针对路径的最终文件名部分进行测试。这些测试在逻辑上通过 AND 组合在一起(除非-o
使用)。感叹号颠倒了测试的意义。